国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java對(duì)象占用內(nèi)存計(jì)算

whlong / 637人閱讀

計(jì)算前提

JDK 版本,不同版本的類可能會(huì)有變化

要區(qū)分是 32bit 還是 64bit 系統(tǒng)

是否開啟壓縮指針(默認(rèn)開啟,指針為 4Byte,否則為 8Byte)

是否數(shù)組,數(shù)組對(duì)象頭多了一個(gè)長度值,占 4Byte

計(jì)算方法

對(duì)象所占內(nèi)存 = 對(duì)象頭 + 所有域 + 填充
其中,若域?yàn)榱硪粋€(gè)對(duì)象,即非基本類型,則需遞歸計(jì)算

對(duì)象頭

對(duì)象頭分為3部分:

mark word:同步狀態(tài)、GC狀態(tài)、hashcode 等

klass pointer: 指向本身的類對(duì)象

數(shù)組類型的長度

_mark _kclass Array Length
32bit 4 4 4
64bit 8 8 4
64+comp 8 4 4

https://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html

不同狀態(tài)下的對(duì)象頭
//  32 bits:
//  --------
//             hash:25 ------------>| age:4    biased_lock:1 lock:2 (normal object)
//             JavaThread*:23 epoch:2 age:4    biased_lock:1 lock:2 (biased object)
//             size:32 ------------------------------------------>| (CMS free block)
//             PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object)
//
//  64 bits:
//  --------
//  unused:25 hash:31 -->| unused:1   age:4    biased_lock:1 lock:2 (normal object)
//  JavaThread*:54 epoch:2 unused:1   age:4    biased_lock:1 lock:2 (biased object)
//  PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object)
//  size:64 ----------------------------------------------------->| (CMS free block)
//
//  unused:25 hash:31 -->| cms_free:1 age:4    biased_lock:1 lock:2 (COOPs && normal object)
//  JavaThread*:54 epoch:2 cms_free:1 age:4    biased_lock:1 lock:2 (COOPs && biased object)
//  narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object)
//  unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)

http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/87ee5ee27509/src/share/vm/oops/markOop.hpp#l29

對(duì)象的域在內(nèi)存中的順序:

域的順序并不是在類中定義的順序,而是經(jīng)過了調(diào)整;每個(gè)對(duì)象都是 8Byte 對(duì)齊的,不是倍數(shù)的話會(huì)在最后填充,具體順序如下:

doubles (8) and longs (8)

ints (4) and floats (4)

shorts (2) and chars (2)

booleans (1) and bytes (1)

references (4/8)

repeat for sub-class fields

https://zeroturnaround.com/rebellabs/dangerous-code-how-to-be-unsafe-with-java-classes-objects-in-memory/5/

不同域的大小
Bytes
boolean 1
byte 1
char 2
short 2
int 4
float 4
long 8
double 8
reference 4
具體例子

64bit 壓縮指針 JDK8 中 String s = "abc",對(duì)象 s 的大小: 48Bytes

注意:不同版本的 JDK String 類的域不同,比如 JDK6 中有 offsetcount,JDK7 中有 hash32
具體驗(yàn)證可以使用 jol 庫:
http://openjdk.java.net/projects/code-tools/jol/

System.out.println(GraphLayout.parseInstance("abc").toPrintable());
==>
java.lang.String@2ff4acd0d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        795707020         24 java.lang.String                                (object)
        795707038         24 [C               .value                         [a, b, c]

Welcome to my Blog

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68297.html

相關(guān)文章

  • Java對(duì)象內(nèi)存占用分析

    摘要:對(duì)于不同的實(shí)現(xiàn),對(duì)象占用的內(nèi)存空間大小可能不盡相同,本文主要分析中的情況,實(shí)驗(yàn)環(huán)境為位系統(tǒng),使用進(jìn)行結(jié)論驗(yàn)證。內(nèi)存占用這里分析一個(gè)只有一組鍵值對(duì)的結(jié)構(gòu)如下首先分析本身的大小。 本文深入分析并驗(yàn)證了不同Java對(duì)象占用內(nèi)存空間大小的情況。對(duì)于不同的jvm實(shí)現(xiàn),Java對(duì)象占用的內(nèi)存空間大小可能不盡相同,本文主要分析HotSpot jvm中的情況,實(shí)驗(yàn)環(huán)境為64位window10系統(tǒng)、JD...

    JouyPub 評(píng)論0 收藏0
  • 07.Android之多媒體問題

    摘要:加載圖的機(jī)制是什么,為何不會(huì)內(nèi)存泄漏自定義可拖動(dòng)的顯示高清大圖的技術(shù)博客大總結(jié)提供一個(gè)設(shè)置圖片的入口,里面去獲得圖片的真實(shí)的寬度和高度,以及初始化我們的重寫,在里面根據(jù)用戶移動(dòng)的手勢(shì),去更新顯示區(qū)域的參數(shù)。 目錄介紹 7.0.0.1 加載bitmap圖片的時(shí)候需要注意什么?為何bitmap容易造成OOM?如何計(jì)算Bitmap占用內(nèi)存? 7.0.0.2 如何理解recycle釋放內(nèi)存問...

    eechen 評(píng)論0 收藏0
  • Java 內(nèi)存結(jié)構(gòu)備忘錄

    摘要:本文詳細(xì)描述了堆內(nèi)存模型,垃圾回收算法以及處理內(nèi)存泄露的最佳方案,并輔之以圖表,希望能對(duì)理解內(nèi)存結(jié)構(gòu)有所幫助。該區(qū)域也稱為內(nèi)存模型的本地區(qū)。在中,內(nèi)存泄露是指對(duì)象已不再使用,但垃圾回收未能將他們視做不使用對(duì)象予以回收。 本文詳細(xì)描述了 Java 堆內(nèi)存模型,垃圾回收算法以及處理內(nèi)存泄露的最佳方案,并輔之以圖表,希望能對(duì)理解 Java 內(nèi)存結(jié)構(gòu)有所幫助。原文作者 Sumith Puri,...

    wow_worktile 評(píng)論0 收藏0
  • 由「Metaspace容量不足觸發(fā)CMS GC」從而引發(fā)的思考

    摘要:第一個(gè)大陡坡是應(yīng)用發(fā)布,老年代內(nèi)存占比下降,很正常。但此時(shí)老年代內(nèi)存使用占比。因?yàn)楹笃诓⒉粫?huì)引發(fā)。可以看出,由于到達(dá)時(shí)候,觸發(fā)了一次和一次。但觸發(fā)時(shí),占比并沒用明顯的規(guī)律。得出,擴(kuò)容導(dǎo)致這個(gè)說法,其實(shí)是不準(zhǔn)確的。 轉(zhuǎn)載請(qǐng)注明原文鏈接:https://www.jianshu.com/p/468... 某天早上,毛老師在群里問「cat 上怎么看 gc」。 showImg(https://...

    StonePanda 評(píng)論0 收藏0
  • Java對(duì)象結(jié)構(gòu)及大小計(jì)算

    摘要:由于的自動(dòng)內(nèi)存管理系統(tǒng)要求對(duì)象起始地址必須是字節(jié)的整數(shù)倍,換句話說,就是對(duì)象的大小必須是字節(jié)的整數(shù)倍。對(duì)象大小計(jì)算要點(diǎn)在位系統(tǒng)下,存放指針的空間大小是字節(jié),是字節(jié),對(duì)象頭為字節(jié)。靜態(tài)屬性不算在對(duì)象大小內(nèi)。 jvm系列 垃圾回收基礎(chǔ) JVM的編譯策略 GC的三大基礎(chǔ)算法 GC的三大高級(jí)算法 GC策略的評(píng)價(jià)指標(biāo) JVM信息查看 GC通用日志解讀 jvm的card table數(shù)據(jù)結(jié)構(gòu) Ja...

    winterdawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<