Java對象的內(nèi)存布局及訪問定位是什么

今天就跟大家聊聊有關(guān)Java對象的內(nèi)存布局及訪問定位是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司是專業(yè)的鄱陽網(wǎng)站建設(shè)公司,鄱陽接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行鄱陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

在HotSpot虛擬機中,對象在內(nèi)存中的布局分為三塊區(qū)域:對象頭(Header)、實例數(shù)據(jù)(InstanceData)、對齊填充(Padding)。

對象的內(nèi)存布局

對象頭包括兩部分信息,第一部分用于存儲對象自身的運行時數(shù)據(jù),如哈希碼、GC分代年齡、鎖狀態(tài)標志、線程持有的鎖、偏向線程ID、偏向時間戳等,官方稱這部分數(shù)據(jù)為MarkWord。另外一部分是類型指針,即對象指向它的類元數(shù)據(jù)的指針,虛擬機通過這個指針確定對象是哪個類的實例。但不是所有的虛擬機實現(xiàn)都會在對象數(shù)據(jù)上保留類型指針,也就是說查找對象的元數(shù)據(jù)信息不一定要經(jīng)過對象本身,這點會在下面對象定位方式中講到。另外如果對象是一個Java數(shù)組,對象頭中還會記錄數(shù)組長度,用來確定Java對象的大小。

HotSpot虛擬機對象頭MarkWord

對象的真正有效數(shù)據(jù),也就是代碼中定義的字段內(nèi)容。這部分存儲數(shù)據(jù)受到虛擬機分配策略參數(shù)和字段在Java源碼中定義順序的影響。HotSpot虛擬機默認分配策略為longs/doubles、ints、shorts/chars、bytes/booleans、oops。相同寬度的字段總是被分配到一起。在這個前提下,父類中定義的變量會出現(xiàn)在子類之前。如果CompactFields參數(shù)為true,那么子類中較窄的變量也可能插到父類變量的空隙中。

對齊填充并不是必然存在的,也沒有特殊含義,它僅僅是占位符。由于HotSpotVM的自動內(nèi)存管理系統(tǒng)要求對象起始地址必須是8字節(jié)的整數(shù)倍,也就是對象大小必須是8字節(jié)的整數(shù)倍。因此當對象實例數(shù)據(jù)沒有對齊時,就會通過對齊填充來補全。

對象的訪問定位

建立對象是為了使用對象,Java程序需要通過Java棧上的reference數(shù)據(jù)來操作Java堆上的對象。reference類型就是一個指向?qū)ο蟮囊?。對象的訪問方式取決于虛擬機實現(xiàn),目前的訪問方式主要有使用句柄和直接指針兩種。

如果使用句柄訪問,Java堆中將會劃分出一塊內(nèi)存作為句柄池,reference中存儲的就是對象的句柄地址,而句柄中包含了對象的實例數(shù)據(jù)與類型數(shù)據(jù)的地址

如果使用直接指針訪問,reference中存儲的直接就是對象地址,但是對象中還會放置訪問類型數(shù)據(jù)的指針。

這兩種對象訪問方式各有優(yōu)劣,使用句柄訪問的話,reference中存儲的是穩(wěn)定的句柄地址,垃圾收集時移動對象的話,只會修改句柄中的實例數(shù)據(jù)指針,而reference本身不需要修改。

使用直接指針訪問的最大好處就是速度更快,節(jié)省了一次指針定位的時間,對象訪問非常頻繁,這種節(jié)省極少成多的話也是非??捎^。

HotSpot虛擬機使用的是直接指針訪問的方式。

看完上述內(nèi)容,你們對Java對象的內(nèi)存布局及訪問定位是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

文章題目:Java對象的內(nèi)存布局及訪問定位是什么
網(wǎng)站網(wǎng)址:http://muchs.cn/article26/ihgjjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)站排名品牌網(wǎng)站建設(shè)、網(wǎng)站制作、ChatGPT建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)