JVM_03-1对象的创建
2022-09-06 10:31:58 0 举报
AI智能生成
JVM_03-1对象的创建
作者其他创作
大纲/内容
类加载检查
分配内存
分配方法
“指针碰撞”(Bump the Pointer)
Java堆中内存是绝对规整的
所有用过的内存都放在一边,空闲的内存放在另一边
中间放着一个指针作为分界点的指示器
“空闲列表”
Java堆中的内存并不是规整
已使用的内存和空 闲的内存相互交错
虚拟机就必须维护一个列表,记录上哪些内存块是可用的
解决并发问题的方法
CAS(compare and swap)
CAS配上失败重试的方式
TLAB
每个线程在Java堆中预先分配一小块内存
-XX:+/-UseTLAB参数来设定虚拟机是否使用TLAB
JVM会默认开启
-XX:TLABSize 指定TLAB大小
默认大小伊甸园的1%
初始化
设置对象头
对象在内存中存储的布局
对象头(Header)
MarkWord
32位占4字节
64位占8字节
KlassPointer类型指针
开启指针压缩占4字节
关闭指针压缩占8字节
数组长度
4字节,只有数据对象才有
实例数据(Instance Data)
对齐填充(Padding)
loss due to the next object alignment
保证对象是8个字节的整数倍(计算机最优的寻址算法)
java对象的指针压缩
jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩
jvm配置参数
哪些信息会被压缩
对象的全局静态变量(即类属性)
对象头信息:64位平台下,原生对象头大小为16字节,压缩后为12字节
对象的引用类型:64位平台下,引用类型本身大小为8字节,压缩后为4字节
对象数组类型:64位平台下,数组类型本身大小为24字节,压缩后16字节
执行<init>方法
0 条评论
下一页