JOL mark word 锁状态标识
锁状态简述:
偏向锁位 1bit | 锁标志位 2bit | 锁状态 |
---|---|---|
0 | 01 | 无锁态(new) |
1 | 01 | 偏向锁 |
- | 00 | 轻量级锁(自旋锁、无锁) |
- | 10 | 重量级锁 |
- | 11 | GC 标记 |
import org.openjdk.jol.info.ClassLayout;
public class SynchronizedTest3 {
public static void main(String[] args) {
Object obj = new Object();
System.out.println(ClassLayout.parseInstance(obj).toPrintable());
synchronized (obj){
System.out.println(ClassLayout.parseInstance(obj).toPrintable());
}
}
}
java.lang.Object object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00 (00000001
00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
12 4 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
java.lang.Object object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 90 49 2d 04 (10010000
01001001 00101101 00000100) (70076816)
4 4 (object header) 00 70 00 00 (00000000 01110000 00000000 00000000) (28672)
8 4 (object header) e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
12 4 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
锁状态
-
偏向锁
-
轻量级锁
-
重量级锁
锁升级
锁的状态流转:
package new_package.jvm.sync;
import org.openjdk.jol.info.ClassLayout;
public class SynchronizedTest3 {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(4100);
Object obj = new Object();
System.out.println(ClassLayout.parseInstance(obj).toPrintable());
synchronized (obj){
System.out.println(ClassLayout.parseInstance(obj).toPrintable());
}
}
}
java.lang.Object object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 05 00 00 00 (00000101
00000000 00000000 00000000) (5)
4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
12 4 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
java.lang.Object object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 05 48 80 14 (00000101
01001000 10000000 00010100) (343951365)
4 4 (object header) ea 7f 00 00 (11101010 01111111 00000000 00000000) (32746)
8 4 (object header) e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
12 4 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total