对象在内存中的存储布局

 

代码实现:

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里面做了手脚

posted @ 2022-04-22 13:28  ZZKZS  阅读(31)  评论(0)    收藏  举报
/*鼠标跟随效果*/