栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

【并发编程】Java利用ClassLayout查看对象头

Java 更新时间:发布时间: 百科书网 趣学号
Java利用ClassLayout查看对象头 1.添加依赖

不同的版本,打印信息不同

  
  
    org.openjdk.jol  
    jol-core  
    0.9 


  
    org.openjdk.jol  
    jol-core
  0.16 

2.mark word说明

Mark Word 64 位, 格式如下:

3.查看对象头(0.9版本)
public class Juc_book_fang_04_JolTest_02 {

    public static void main(String[] args) {
        Object dog = new Object();
        System.out.println("初始信息:"+ClassLayout.parseInstance(dog).toPrintable());
        System.out.println(dog.hashCode());
        System.out.println("hashcode信息:"+ClassLayout.parseInstance(dog).toPrintable());
        synchronized (dog) {
            System.out.println("加锁后信息:"+ClassLayout.parseInstance(dog).toPrintable());
        }
        System.out.println("释放锁后信息:"+ClassLayout.parseInstance(dog).toPrintable());
    }
}

对比生成 hashcode 前后 发现, 只有第二段到第五段有变化 第六到八段依旧为 0,那么第六到八段应该就是 25 位的 unused , 第二到五段应该就是 31 位的 hashcode. 但是根据 64 位的 mark word 格式来看, 应该是 25 位的 unused 排在 hashcode 前面并且结尾应该为 01, 所以这段是倒叙排列的.

jol 获取的对象头是前八段倒叙排列,倒序的有点可以参考redis的二进制处理,也是使用的倒序.原理都是相通的.

4.查看对象头(0.16版本)
public class Juc_book_fang_04_JolTest_02 {
    public static void main(String[] args) {
        final Object obj = new Object();
        System.out.println("启动后对象布局:n" + ClassLayout.parseInstance(obj).toPrintable());
        //JKD8延迟4S开启偏向锁
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //可偏向 101
        final Object monitor = new Object();
        System.out.println("延迟5秒后对象布局:n" + ClassLayout.parseInstance(monitor).toPrintable());
        //偏向锁
        synchronized (monitor) {
            System.out.println("对象加锁后的布局:n" + ClassLayout.parseInstance(monitor).toPrintable());
        }
        System.out.println("对象释放锁后的布局:n" + ClassLayout.parseInstance(monitor).toPrintable());
    }
}

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/956391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号