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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

对象在内存中的存储布局

發布時間:2024/7/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象在内存中的存储布局 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對象頭包含:

markword(和鎖相關的信息)? 8字節

class pointer(說明對象屬于哪個類),jvm指針八字節,但是默認壓縮,所有4個字節

對象體包含:

instance word實例數據(例如int,這就占四個字節,long就占八個)

padding 對齊,整體不能被八整除,就補齊八,為了提高效率

查看對象在內存中的情況,先導入classLayout jar包

下載地址:https://repo.maven.apache.org/maven2/org/openjdk/jol/jol-cli/?選xxxfull.jar

?

上圖中第一行開始地址是0,大小為4字節的,第二行開始地址是4,大小為4字節的 就是markword

第三行是class pointer(壓縮過了,四字節)

因為o沒有數據,所以總共大小是8+4=12,補齊之后是16

最后一行就是補齊了四個字節

?

?

剛new出來的對象,處于無鎖態,沒競爭的時候是偏向鎖,每次來看一看有沒有人用,沒有我繼續用,有競爭轉為自旋鎖,即輕量級鎖,一直自旋,如果競爭激烈,轉為重量級鎖。

可以看出,mark word不光有鎖信息,還有分代年齡信息

例:老年代很快滿了,分代從15改為31可行不?? 不可行,分代年齡總共四位,最大是15

上面的hashcode存的是identity hashcode,調用hahcode方法之后才有值,不然里面沒值。

偏向鎖:54位里面記錄了這個線程的id,下次有調用會對比id

輕量級鎖的62位,這些競爭的線程每個都有自己的lock Record來搶,通過自旋來搶,誰搶到誰的

?因為一直自旋太消耗cpu,所以轉到重量級鎖

?

鎖消除:

public void add(String s1,String s2){

? ? StringBuffer sb = new StringBuffer();

sb.append().append();

}

append是線程安全的,一直加鎖解鎖性能低,檢測到只在這個方法里用到sb的append,消除鎖不用。

總結

以上是生活随笔為你收集整理的对象在内存中的存储布局的全部內容,希望文章能夠幫你解決所遇到的問題。

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