您当前的位置: 首页 >  Java

喜欢猪猪

暂无认证

  • 0浏览

    0关注

    228博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入剖析JAVA对象

喜欢猪猪 发布时间:2021-08-26 10:28:31 ,浏览量:0

深入剖析JAVA对象

JOL = Java Object Layout


            org.openjdk.jol
            jol-core
            0.9
        

jclasslib - idea 插件

HOTSPOT的对象构成

image.png

new Object();

对象内部装有成员变量

  • markword 8bytes
  • class pointer - 指向对象所属的class (一般是4bytes)
  • instance data - 成员变量
  • padding - 8字节对齐
理解对象的大小
public class JustTest { //JOL = Java Object Layout //OpenJDK

    private static class T {
        int i;
        long l;
        boolean b;
        String s = "http://mashibing.com";

        void m(){};
    }

    public static void main(String[] args) {

        T t = new T();
        System.out.println(ClassLayout.parseInstance(t).toPrintable());

    }
}
对象头的奥秘(mark word)

image.png

  • hashcode
  • 锁信息
  • GC信息
对象头中的hashcode 对象头中的GC信息

著名的三色标记算法

它的中间信息就记录在对象头部

对象头中的锁信息

image.png

轻量级锁:自旋锁 CAS

AtomicInteger -> Unsafe -> Unsafe.cpp -> lock cmpxchg

lock 为什么能实现原子性?锁总线 / 锁缓存行

缓存行?//三级缓存 MESI 以及缓存不同行的编程技巧

重量级锁:交给OS去管理的锁

  • 排队

为什么轻量级锁可以解决同步问题(自旋),但是也需要重量级锁的存在?什么情况用轻?什么情况用重?

关注
打赏
1648795721
查看更多评论
立即登录/注册

微信扫码登录

0.0369s