日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA 对象分配过程

發布時間:2024/9/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA 对象分配过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 在JAVA中,對象的分配一般使用new關鍵字。

 ?當虛擬機遇到new指令時,會先檢查該指令所包含的參數在常量池中能否找到一個符號引用,并檢查該符號引用所代表的類是否被加載、解析和初始化。

  如果沒有,則會先執行類的加載過程。

2. 類加載完成后,會為該對象分配內存空間。一個對象需要多大的內存空間在類加載完成后就確定了。

 分配內存有兩種方法,依據內存空間是否規整來確定。

 如果被內存空間是規整的,只要把空閑指針向空閑內存方向挪動即可,這種方法稱為“指針碰撞”;

 如果內存空間不是規整的,需要有一個“空閑列表”用于記錄哪些內存是可用的,并從可用內存中分配足夠大小的內存出來,并修改“空閑列表”;

 在使用Serial、ParNew等算法時是用的指針碰撞;使用Mark-Sweep等算法時,采用空閑列表。

3. 在多線程環境下怎么保證分配內存的動作是線程安全的。

 一種方法是對分配內存的動作進行同步;

 另一種方法是使用“本地線程分配緩存(TLAB)”,每個線程會預先分配到一塊內存,申請內存會在各自的TLAB上進行;只有當TLAB不夠是,才需要同步分配新的TLAB;

4. 分配好內存后,虛擬機會將除對象頭以外的空間初始化為0。這就是為什么JAVA代碼中的全局變量可以不用初始化也可以使用的原因。

  此外,虛擬機還會對對象頭進行必要的設置,比如對象所屬的類,對象的哈希碼,對象的GC分代年齡等信息。

5. 上述過程完成或,虛擬機認為一個對象已經創建完畢,但是從程序來看,對象還沒有初始化,因此需要根據代碼初始化各個變量。

 這一步完成后,一個可用的對象就創建好了。

轉載于:https://www.cnblogs.com/linxiong/p/4527865.html

總結

以上是生活随笔為你收集整理的JAVA 对象分配过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。