java对象创建流程
2020-06-30 11:48:37 0 举报
java对象在jvm虚拟机的创建过程
作者其他创作
大纲/内容
空闲列表分配内存
1.文件格式验证2.元数据验证3.字节码格式验证4.符号引用验证
类加载器加载
对象创建
TLAB分配内存
假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)
结束
分配内存
静态变量分配内存设置初始值
加载
检查类是否初始化
对象头是用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32个比特和64个比特,官方称它为“Mark Word”。
否
是
双亲委派模型加载
执行构造方法
New指令
Serial,ParNew
指针碰撞分配内存
是否使用TLAB
类加载
验证
解析
设置对象头
CAS重试分配
使用哪种收集器
如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为“空闲列表”(Free List)
虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB 参数来设定
CMS
收藏
收藏
0 条评论
下一页
为你推荐
查看更多