java中的锁:读锁、写锁、共享锁、互斥锁。
java对象分配内存不固定(不然怎么会有内存溢出),64位虚拟机,最小单位是8个字节的倍数,对象实际没有,jvm就会
自己补空到8的倍数.对象内存结构:对象头、实例数据、对齐填充位(可能没有)。
64位jvm中是12个字节,96位 8位1个字节
com.hbdtld.A object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 1 boolean A.aaa N/A
13 3 (loss due to the next object alignment)
对象头:mark World、对象的HashCode、Epoch、ThreadId、age(gc状态,默认15次复制算法,为什么会15,因为这个age大小是4位,最大能表示0~2的4次方-1,所以是15次)、偏向状态0或1、锁状态标志01、
MetaData元数据指针、数组长度(数组对象才有)
org.openjdk.jol这个包可以查看源码 openjdk8-master
hotspot :产品,实现了jvm,sun公司开发的
jvm :规范/标准 (c2 compiler这个处理器是核心)
市面上的虚拟机有:hospot、j9、taobaojvm等待。
对象状态五种:
1、无状态new出来的时候
2、偏向锁
3、轻量锁
4、重量锁
5、gc标记了
mark word根据对象状态时刻变化的。
对象的hashcode:在未执行c++本地方法的hashCode()方法之前是没有储存的 大端存储和小端存储(大部分pc都是这样的),数值存储相反