導航:首頁 > 編程語言 > java對象的長度

java對象的長度

發布時間:2024-09-07 13:47:37

① 怎麼確定java對象的大小

普通對象的結構如下,按64位機器的長度計算
1. 對象頭(_mark), 8個位元組

2. Oop指針,如果是32G內存以下的,默認開啟對象指針壓縮,4個位元組
3. 數據區
4.Padding(內存對齊),按照8的倍數對齊

數組對象結構是
1. 對象頭(_mark), 8個位元組

2. Oop指針,如果是32G內存以下的,默認開啟對象指針壓縮,4個位元組
3. 數組長度,4個位元組
4. 數據區

5. Padding(內存對齊),按照8的倍數對齊

清楚了對象在內存的基本布局後,咱們說兩種計算Java對象大小的方法
1. 通過java.lang.instrument.Instrumentation的getObjectSize(obj)直接獲取對象的大小

2. 通過sun.misc.Unsafe對象的objectFieldOffset(field)等方法結合反射來計算對象的大小

java.lang.instrument.Instrumentation.getObjectSize()的方式

先講講java.lang.instrument.Instrumentation.getObjectSize()的方式,這種方法得到的是Shallow Size,即遇到引用時,只計算引用的長度,不計算所引用的對象的實際大小。如果要計算所引用對象的實際大小,可以通過遞歸的方式去計算。
java.lang.instrument.Instrumentation的實例必須通過指定javaagent的方式才能獲得,具體的步驟如下:
1. 定義一個類,提供一個premain方法: public static void premain(String agentArgs, Instrumentation instP)
2. 創建META-INF/MANIFEST.MF文件,內容是指定PreMain的類是哪個: Premain-Class: sizeof.ObjectShallowSize
3. 把這個類打成jar,然後用java -javaagent XXXX.jar XXX.main的方式執行

有興趣可以看下博主的:http://blog.csdn.net/iter_zc/article/details/41822719

閱讀全文

與java對象的長度相關的資料

熱點內容
怎麼讓小天才app查看寶貝的通訊錄 瀏覽:620
dxgpdf 瀏覽:253
哪個命令 瀏覽:41
文件不能打包壓縮 瀏覽:697
linux源碼調試 瀏覽:946
全球所有c語言編譯器 瀏覽:657
如何學好app安全 瀏覽:261
怎麼給已經發表的文章加密 瀏覽:1000
php加密驗簽 瀏覽:168
如何新建app 瀏覽:17
python人臉識別某人 瀏覽:609
能免費解壓軟體的瀏覽器 瀏覽:839
耳機適配器加密狗 瀏覽:619
蘋果為什麼和安卓為什麼換不了號 瀏覽:297
解壓圖片怎樣快速導入 瀏覽:746
手機新建相冊加密 瀏覽:822
單片機延時1秒 瀏覽:188
ctf如何加密 瀏覽:921
手機app怎麼安裝在智能電視使用 瀏覽:366
遠程桌面授權伺服器如何取消 瀏覽:897