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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java对象的内存结构_JAVA 对象内存结构

發(fā)布時(shí)間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java对象的内存结构_JAVA 对象内存结构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JAVA對(duì)象內(nèi)存結(jié)構(gòu)

HotSpot虛擬機(jī)中,對(duì)象在內(nèi)存中存儲(chǔ)的布局可以分為三塊區(qū)域:對(duì)象頭(Header)、實(shí)例數(shù)據(jù)(Instance Data)和對(duì)齊填充(Padding)。

對(duì)象頭

markWord

用于存儲(chǔ)對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù), 如哈希碼(HashCode)、GC分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程ID、偏向時(shí)間戳等等,這部分?jǐn)?shù)據(jù)的長(zhǎng)度在32位和64位的虛擬機(jī)(暫 不考慮開(kāi)啟壓縮指針的場(chǎng)景)中分別為32個(gè)和64個(gè)Bits。

Mark Word被設(shè)計(jì)成一個(gè)非固定的數(shù)據(jù)結(jié)構(gòu)以便在極小的空間內(nèi)存儲(chǔ)盡量多的信息,它會(huì)根據(jù)對(duì)象的狀態(tài)復(fù)用自己的存儲(chǔ)空間。

無(wú)鎖狀

加鎖狀態(tài)

其中輕量級(jí)鎖和偏向鎖是Java6 對(duì) synchronized 鎖進(jìn)行優(yōu)化后新增加的,稍后我們會(huì)簡(jiǎn)要分析。這里我們主要分析一下重量級(jí)鎖也就是通常說(shuō)synchronized的對(duì)象鎖,鎖標(biāo)識(shí)位為10,其中指針指向的是monitor對(duì)象(也稱為管程或監(jiān)視器鎖)的起始地址。每個(gè)對(duì)象都存在著一個(gè) monitor 與之關(guān)聯(lián),對(duì)象與其 monitor 之間的關(guān)系有存在多種實(shí)現(xiàn)方式,如monitor可以與對(duì)象一起創(chuàng)建銷毀或當(dāng)線程試圖獲取對(duì)象鎖時(shí)自動(dòng)生成,但當(dāng)一個(gè) monitor 被某個(gè)線程持有后,它便處于鎖定狀態(tài)。在Java虛擬機(jī)(HotSpot)中,monitor是由ObjectMonitor實(shí)現(xiàn)的,其主要數(shù)據(jù)結(jié)構(gòu)如下(位于HotSpot虛擬機(jī)源碼ObjectMonitor.hpp文件,C++實(shí)現(xiàn)的)

ObjectMonitor() {

_header = NULL;

_count = 0; //記錄個(gè)數(shù)

_waiters = 0,

_recursions = 0;

_object = NULL;

_owner = NULL;

_WaitSet = NULL; //處于wait狀態(tài)的線程,會(huì)被加入到_WaitSet

_WaitSetLock = 0 ;

_Responsible = NULL ;

_succ = NULL ;

_cxq = NULL ;

FreeNext = NULL ;

_EntryList = NULL ; //處于等待鎖block狀態(tài)的線程,會(huì)被加入到該列表

_SpinFreq = 0 ;

_SpinClock = 0 ;

OwnerIsThread = 0 ;

}

ObjectMonitor中有兩個(gè)隊(duì)列,_WaitSet 和 _EntryList,用來(lái)保存ObjectWaiter對(duì)象列表( 每個(gè)等待鎖的線程都會(huì)被封裝成ObjectWaiter對(duì)象),_owner指向持有ObjectMonitor對(duì)象的線程,當(dāng)多個(gè)線程同時(shí)訪問(wèn)一段同步代碼時(shí),首先會(huì)進(jìn)入 _EntryList 集合,當(dāng)線程獲取到對(duì)象的monitor 后進(jìn)入 _Owner 區(qū)域并把monitor中的owner變量設(shè)置為當(dāng)前線程同時(shí)monitor中的計(jì)數(shù)器count加1,若線程調(diào)用 wait() 方法,將釋放當(dāng)前持有的monitor,owner變量恢復(fù)為null,count自減1,同時(shí)該線程進(jìn)入 WaitSet集合中等待被喚醒。若當(dāng)前線程執(zhí)行完畢也將釋放monitor(鎖)并復(fù)位變量的值,以便其他線程進(jìn)入獲取monitor(鎖)。如下圖所示

由此看來(lái),monitor對(duì)象存在于每個(gè)Java對(duì)象的對(duì)象頭中(存儲(chǔ)的指針的指向),synchronized鎖便是通過(guò)這種方式獲取鎖的,也是為什么Java中任意對(duì)象可以作為鎖的原因,同時(shí)也是notify/notifyAll/wait等方法存在于頂級(jí)對(duì)象Object中的原因。

總結(jié)

以上是生活随笔為你收集整理的java对象的内存结构_JAVA 对象内存结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品欧美激情在线 | av黄色片 | 国产精品人人人人 | 国产av一区二区不卡 | 国产五月天婷婷 | 成人性生交大免费看 | 无码aⅴ精品一区二区三区 精品久久在线 | 国产九九热 | 加勒比在线一区 | 免费三片在线观看网站v888 | 国产精品国产三级国产传播 | 人体毛片 | 亚洲精品综合在线 | 黄色网址在线免费看 | 欧美日韩不卡一区二区三区 | 久久另类ts人妖一区二区 | 午夜久久视频 | 最好看的mv中文字幕国语电影 | 久草免费在线观看视频 | 无遮挡黄色 | 国产视频97 | 三级黄色生活片 | 久久国产精品无码一区二区 | 性大片潘金莲裸体 | 97人妻人人澡人人爽人人精品 | 日本成人一区二区 | 99re这里只有精品66 | 91精品国产91久久久久久吃药 | 蓝牛av| 在线免费观看亚洲 | 日韩免费一级 | 色婷婷av一区二区 | 奇米影视999 | 综合久久久久久久久久久 | av大帝| 国产无精乱码一区二区三区 | 男男做的视频 | 一区二区三区蜜桃 | 国产尤物在线观看 | 18岁免费观看电视连续剧 | 亚洲国产专区 | 国产美女性生活 | 亚洲黄页| 欧美不卡在线观看 | 日韩免费观看av | 成人在线观看一区二区三区 | 中文字幕无码不卡免费视频 | 大尺度av在线 | av性在线 | 可乐操亚洲 | 日韩欧美电影一区二区三区 | 天堂va蜜桃一区二区三区漫画版 | 欧美成人片在线 | 精品在线视频一区二区三区 | 国产精品xxxxxx | 午夜久久久久久久久久久 | 日本女人毛片 | 好看的中文字幕 | 久久国产激情 | 在线三级av | 免费观看成人 | 俄罗斯一级片 | 香港一级纯黄大片 | 日本中文字幕精品 | 婷婷丁香亚洲 | 涩涩网站视频 | 天堂视频免费在线观看 | 捆绑黑丝美女 | 中文字幕无码乱人伦 | 日日撸夜夜撸 | 美女av在线免费观看 | 国产一区在线视频观看 | 色欧洲 | 99视频久久 | 中国第一毛片 | 中文在线免费看视频 | 国产精品成人一区 | 梦梦电影免费高清在线观看 | 免费黄色网页 | 777久久久精品一区二区三区 | 自拍偷拍免费 | 2018自拍偷拍 | 美女扒开让男人桶爽 | 亚洲欧美国产视频 | 影音先锋在线播放 | 日本三级视频在线 | 丰满熟女人妻一区二区三 | 亚洲专区欧美专区 | 色www | 午夜影院久久久 | av福利在线观看 | 欧美69精品久久久久久不卡 | avwww. | 中国黄色三级视频 | 亚洲狠狠爱 | 手机看片欧美日韩 | 无码精品一区二区三区AV | 五月天福利视频 | 色一色成人网 |