Java代码如何查看对象头和锁状态呢?
下文笔者讲述使用java代码查看对象头和锁状态的方法及示例分享,如下所示
Java查看对象头和锁状态的实现思路
借助jol-core这个包 即可查看对象头和锁状态例:java代码查看对象头和锁状态的示例
<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency> import org.openjdk.jol.info.ClassLayout; public class ObjectHeader { private static myobject myobject = new myobject(); public static void main(String[] args) { System.out.println("当前MAIN线程开始: " + Thread.currentThread().getName() + " --" + ClassLayout.parseInstance(myobject).toPrintable()); new Thread(new Runnable() { @Override public void run() { synchronized (myobject) { System.out.println("当前线程:" + Thread.currentThread().getName() + "--" + ClassLayout.parseInstance(myobject).toPrintable()); } } }, "线程1号").start(); new Thread(new Runnable() { @Override public void run() { synchronized (myobject) { System.out.println("当前线程: " + Thread.currentThread().getName() + "-- " + ClassLayout.parseInstance(myobject).toPrintable()); } } }, "线程2号").start(); System.out.println("当前MAIN线程结束: " + Thread.currentThread().getName() + "--" + ClassLayout.parseInstance(myobject).toPrintable()); } static class myobject { public myobject() { } } }

锁状态 | 代码 | 备注 |
无锁状态 | 01 | 对象的hashcode,对象分代年龄,是否是偏向锁(0) |
偏向锁 | 01 | 偏向锁线程ID,偏向时间戳,对象分代年龄,是否是偏向锁(1) |
轻量级锁 | 00 | 指向栈中锁记录的指针 |
重量级锁 | 10 | 指向互斥量(重量级锁)指针 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。