对象在内存中的存储布局

 

代码实现:

复制代码
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 @   ZZKZS  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
/*鼠标跟随效果*/
点击右上角即可分享
微信分享提示