package com.lockjx;
public class L {
//private boolean flag = false;
}
package com.lockjx;
import org.openjdk.jol.info.ClassLayout;
import java.util.concurrent.locks.ReentrantLock;
/**
* 64 JVM下面
*
* 对象里面有一个boolean是16 byte
*
*
* 对象头 + 实例数据 + (数据对齐)
*
* 如果对象头加实例数据 是八的倍数 就没有对齐填充
*
*
* 对象头一定有
*
* 什么是java对象头?
* 64位jvm 一共占12字节
*
* 书上 java对象头mark word = 32位
* 自己 java对象头 mark word = 12 * 8 = 96 位
*
*
* // 当前虚拟机开启了 指针压缩 所有class metadata是32位 如果没开启应该是64位 都对
* 根据jvm文档说明 前面 64bit markword 32位 class metadata address
*
*
*
* JVM ---- 是规范/标准 ----定义了对象头什么组成
*
* 由两部分组成 ===> mark word + klass pointer
*
* HotSpot ------- 产品/实现
* J9 taobaovm mic
*
* Openjdk 是一个 开源的 JVM hotspot 的源代码
*
*
* Java对象状态一共有几种?
* 1 无状态(刚刚new出来) 2 偏向锁 3 轻量锁 4 重量锁 5 gc标记
*
* 00000000000000000000
* 无状态
* 偏向锁
* 轻量
* 重量锁
* gc标记
*
* hashcode 真的存在吗? 这 25个bit怎么回事
*
* 小端 高端存储
*/
public class Test {
static L l = new L();
static ReentrantLock reentrantLock = new ReentrantLock();
public static void lockTest() {
synchronized (l) {
System.out.println("xxxx");
}
}
public static void main(String[] args) {
System.out.println(Integer.toHexString(l.hashCode()));
System.out.println(ClassLayout.parseInstance(l).toPrintable());
}
}