代码实现:
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里面做了手脚