今天就跟大家聊聊有關(guān)深入淺析java虛擬機(jī)中的對(duì)象訪問,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出將樂免費(fèi)做網(wǎng)站回饋大家。
java 虛擬機(jī)中對(duì)象訪問詳解
對(duì)象訪問會(huì)涉及到Java棧、Java堆、方法區(qū)這三個(gè)內(nèi)存區(qū)域。
如下面這句代碼:
Object objectRef = new Object();
假設(shè)這句代碼出現(xiàn)在方法體中,"Object objectRef” 這部分將會(huì)反映到Java棧的本地變量中,作為一個(gè)reference類型數(shù)據(jù)出現(xiàn)。而“new Object()”這部分將會(huì)反映到Java堆中,形成一塊存儲(chǔ)Object類型所有實(shí)例數(shù)據(jù)值的結(jié)構(gòu)化內(nèi)存,根據(jù)具體類型以及虛擬機(jī)實(shí)現(xiàn)的對(duì)象內(nèi)存布局的不同,這塊內(nèi)存的長度是不固定。另外,在java堆中還必須包括能查找到此對(duì)象類型數(shù)據(jù)(如對(duì)象類型、父類、實(shí)現(xiàn)的接口、方法等)的地址信息,這些數(shù)據(jù)類型存儲(chǔ)在方法區(qū)中。
reference類型在java虛擬機(jī)規(guī)范里面只規(guī)定了一個(gè)指向?qū)ο蟮囊玫刂?,并沒有定義這個(gè)引用應(yīng)該通過那種方式去定位,訪問到j(luò)ava堆中的對(duì)象位置,因此不同的虛擬機(jī)實(shí)現(xiàn)的訪問方式可能不同,主流的方式有兩種:使用句柄和直接指針。
句柄訪問方式:java堆中將劃分出一塊內(nèi)存來作為句柄池,reference中存儲(chǔ)的就是對(duì)象的句柄地址,而句柄中包含了對(duì)象實(shí)例數(shù)據(jù)和類型數(shù)據(jù)各自的具體地址信息。
指針訪問方式:reference變量中直接存儲(chǔ)的就是對(duì)象的地址,而java堆對(duì)象一部分存儲(chǔ)了對(duì)象實(shí)例數(shù)據(jù),另外一部分存儲(chǔ)了對(duì)象類型數(shù)據(jù)。
這兩種訪問對(duì)象的方式各有優(yōu)勢(shì),使用句柄訪問方式最大好處就是reference中存儲(chǔ)的是穩(wěn)定的句柄地址,在對(duì)象移動(dòng)時(shí)只需要改變句柄中的實(shí)例數(shù)據(jù)指針,而reference不需要改變。使用指針訪問方式最大好處就是速度快,它節(jié)省了一次指針定位的時(shí)間開銷,就虛擬機(jī)而言,它使用的是第二種方式(直接指針訪問)。
看完上述內(nèi)容,你們對(duì)深入淺析java虛擬機(jī)中的對(duì)象訪問有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。