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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java--对象内存布局

發布時間:2023/12/10 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java--对象内存布局 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在HotSpot虛擬機中,對象在內存中的存儲布局可以分為3塊區域:對象頭部、實例數據、對齊填充。

  一、對象頭部Header的布局

Mark Word
Class 指針

  在32位系統下,上面兩部分各占4B;

  在64位系統中,Mark Work占4B,class指針在開啟指針壓縮的時候占4B;為開啟指針壓縮的時候占8B.

  

  1、Mark Word 存儲對象自身的運行時數據信息,例如哈希碼,GC分代年齡,鎖狀態標志,線程持有的鎖,偏向線程ID。

  2、Class 指針,通過該指針確定該對象是哪個類的實例。

  另外,如果該對象是一個數組,那么還將會有一個數據來記錄數組的長度4B(32bit)/8B(64bit)。

二、數據部分

  在該字段中,無論是從父類繼承下來的還是該類自身的,都需要記錄下來,而這部分的存儲順序受虛擬機的分配策略和定義的順序的影響。

  默認分配策略:long/double ->? int/float -> short/char -> byte/boolean?-> Reference

  如果設置了-XX:FieldsAllocationStyle=0(默認是1),那么引用就會放在最前面:

              Reference -> long/double ->? int/float -> short/char -> byte/boolean

  結論:分配策略總是按照寬度由大到小的順序排列,相同寬度的放在一起。

  在有繼承關系的對象中,只有一個頭部,父類的屬性分配到該對象中,這樣才能通過父類訪問他的屬性。如果開啟CompactFields,那么,子類中較窄的變量就會插到父列的變量的空隙中。

  [[注]] 靜態屬性所占的空間通常不計算到對象本身的空間中,以為他的引用是在方法區。

  屬性的對齊,例如byte占用一個字節的空間,那么就會填充3字節實現對齊。(32bit系統)

三、對齊填充

  Java對象在內存中將以8字節對齊,也就是對象的總大小必須是8字節的整數倍。

總結

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

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