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

熱點內容
鴻蒙方舟編譯器安卓是什麼 瀏覽:239
手機加密中斷數據 瀏覽:505
學校機房伺服器長什麼樣子 瀏覽:248
csharp的編譯器是啥 瀏覽:486
linux電腦如何連接伺服器地址 瀏覽:955
阿里域名郵箱pop伺服器地址 瀏覽:852
李白pdf 瀏覽:782
pdfmax 瀏覽:223
跑步緊身褲壓縮褲 瀏覽:215
鄭州金水房價查詢app哪個好 瀏覽:575
房地產開發流程pdf 瀏覽:243
小鵬p7能耗APP怎麼查 瀏覽:243
如何代掛伺服器 瀏覽:286
安卓機拍視頻時怎麼當背景音樂 瀏覽:879
方舟編譯器華為p20pro更新 瀏覽:30
php程序漏洞 瀏覽:552
手機app怎麼轉過去 瀏覽:233
新建文件夾標記 瀏覽:486
兩處收入個稅App上怎麼申報 瀏覽:674
hive創建資料庫命令 瀏覽:850