new對(duì)象

虛擬機(jī)遇到一條new指令時(shí),首先將去檢查這個(gè)指令的參數(shù)是否能在常量池中定位到一個(gè)類的符號(hào)引用,并且檢查這個(gè)符號(hào)引用代表的類是否已被加載、解析和初始化過(guò)。

虛擬機(jī)將為新生對(duì)象分配內(nèi)存,內(nèi)存分配方式有兩種
指針碰撞:假設(shè)Java堆中內(nèi)存是絕對(duì)規(guī)整的,所有用過(guò)的內(nèi)存都放在一邊,空閑的放在另一邊,中間放著一個(gè)指針作為分界點(diǎn)的指示器,那所分配內(nèi)存就僅僅是把那個(gè)指針向空閑空間那邊挪動(dòng)一段與對(duì)象大小相等的距離。
空閑列表:如果Java堆中的內(nèi)存并不是規(guī)整的,已使用的內(nèi)存和空閑的內(nèi)存相互交錯(cuò),虛擬機(jī)就必須維護(hù)一個(gè)列表,記錄哪些內(nèi)存塊是可用的,在分配的時(shí)候從列表中找到一塊足夠大的空間劃分給對(duì)象實(shí)例,并更新列表上的記錄。

對(duì)象創(chuàng)建線程安全問(wèn)題解決方案有兩種:
1、對(duì)分配內(nèi)存空間的動(dòng)作進(jìn)行同步處理
2、每個(gè)線程在Java堆中預(yù)先分配一小塊內(nèi)存,成為本地線程分配緩沖(Thread Local Allocation Buffer,TLAB)。

內(nèi)存分配完成后,虛擬機(jī)需要將分配到的內(nèi)存空間都初始化為零值(不包括對(duì)象頭)。

虛擬機(jī)對(duì)對(duì)象進(jìn)行必要的設(shè)置,如這個(gè)對(duì)象是哪個(gè)類的實(shí)例、如何找到類的元數(shù)據(jù)信息、對(duì)象的哈希碼、對(duì)象的GC分代年齡等信息(存放于對(duì)象頭)。

執(zhí)行在<init>方法,把對(duì)象按照程序員的意愿進(jìn)行初始化。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,810評(píng)論 11 349
  • 一、運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)管理的內(nèi)存包括幾個(gè)運(yùn)行時(shí)數(shù)據(jù)內(nèi)存:方法區(qū)、虛擬機(jī)棧、本地方法棧、堆、程序計(jì)數(shù)器,...
    kennethan閱讀 2,178評(píng)論 1 91
  • 埃爾法是這個(gè)世界的神明,人人都有一次向他提問(wèn)的機(jī)會(huì),他會(huì)告訴你答案。 01.反抗 小唐和她的男朋友很相愛(ài),他們近期...
    保小羅閱讀 582評(píng)論 9 17
  • 是煙不好抽呢,還是酒不好喝呢,你碰什么不好,偏要碰愛(ài)情,陌生人答應(yīng)我不要輸在感情上,不屬于我的傘,我寧愿淋著走,不...
    函谷舉閱讀 133評(píng)論 0 0

友情鏈接更多精彩內(nèi)容