導航:首頁 > 編程語言 > 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對象的長度相關的資料

熱點內容
戰地v怎麼換伺服器 瀏覽:307
加密狗復制能用嗎 瀏覽:469
java字元串去重演算法 瀏覽:348
程序員怎麼投票 瀏覽:904
一米閱讀app家長端怎麼使用 瀏覽:95
pdf轉word網站 瀏覽:910
大整數乘積演算法 瀏覽:255
pdf研所 瀏覽:862
四維數組php 瀏覽:754
上海支持加密貨幣支付 瀏覽:85
創建ip地址伺服器 瀏覽:865
劍靈伺服器地理位置有什麼影響 瀏覽:135
javaweb絕對路徑 瀏覽:499
python通過位元組傳輸 瀏覽:165
android啟動service的方法 瀏覽:234
python股票決策 瀏覽:886
linuxvim復制行 瀏覽:367
文件夾多張圖片按順序命名 瀏覽:802
韓國hcc壓縮機 瀏覽:900
蘋果手機截屏被app發現怎麼辦 瀏覽:555