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 | 指向互斥量(重量级锁)指针 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


