物件在記憶體中的儲存佈局
阿新 • • 發佈:2022-04-22
程式碼實現:
package com.zzk; import org.openjdk.jol.info.ClassLayout; public class JustTest { private static class T{ int a; boolean m; String s = "hello world"; } public static void main(String[] args) { T t = new T(); System.out.println(ClassLayout.parseInstance(t).toPrintable());/*synchronized (t) { System.out.println(ClassLayout.parseInstance(t).toPrintable()); }*/ System.out.println(ClassLayout.parseInstance("hello world").toPrintable()); } }
輸出結果:
結果顯示t物件佔用24個位元組,其中物件頭佔用了12個位元組,例項資料佔用了4+1=5個位元組,由於需要被8整除,所以補3個位元組。
最後儲存在String中的只是Byte陣列的引用地址,所以4位元組就夠了。
鎖住物件的時候,有什麼變化呢
T t = new T(); System.out.println(ClassLayout.parseInstance(t).toPrintable()); synchronized (t) { System.out.println(ClassLayout.parseInstance(t).toPrintable()); }
顯然,鎖住物件就是在markword裡面做了手腳