一个Java对象在内存中包括3个部分:
对象头、实例数据和对齐填充
数据 内存 -- CPU 寄存器 -127 补码 10000001 - 11111111 32位的处理器
一次能够去处理32个二进制位 4字节的数据 64位操作系统 8字节 2的64次方的寻址空间
指针压缩技术 JDK1.6出现的 开启了指针压缩 什么时候指针压缩会无效 ??
超过32G指针压缩无效
小端存储:
便于数据之间的类型转换,例如:long类型转换为int类型时,高地址部分的数据可以直接截掉。
大端存储:
便于数据类型的符号判断,因为最低地址位数据即为符号位,可以直接判断数据的正负号。
java中使用的是大端存储。
内存模型设计之–Class Pointer
句柄池访问:
直接指针访问对象图解:
区别:
句柄池:
使用句柄访问对象,会在堆中开辟一块内存作为句柄池,句柄中储存了对象实例数据(属性值结构体) 的内存地址,访问类型数据的内存地址(类信息,方法类型信息),对象实例数据一般也在heap中开 辟,类型数据一般储存在方法区中。
**优点** :reference存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为) 时只会改变句柄中的实例数据指针,而reference本身不需要改变。
**缺点** :增加了一次指针定位的时间开销。
**直接访问:**
直接指针访问方式指reference中直接储存对象在heap中的内存地址&#x