JVM-对象创建分配内存详细流程
2021-08-16 09:35:38 18 举报
JVM-对象创建分配内存详细流程
作者其他创作
大纲/内容
默认情况下,TLAB和refill_waste_limit都是会在运行时不断调整的,使系统的运行状态达到最优。
大于
是
否
逃逸分析开启栈上分配
refill_waste_limit 是指最大的浪费空间,假设为5KB,通俗一点讲就是: 1、假如当前TLAB已经分配96KB,还剩下4KB,但是现在new了一个对象需要6KB的空间,显然TLAB的内存不够了,这时可以简单的重新申请一个TLAB,原先的TLAB交给Eden管理,这时只浪费4KB的空间,在_refill_waste_limit 之内。 2、假如当前TLAB已经分配90KB,还剩下10KB,现在new了一个对象需要11KB,显然TLAB的内存不够了,这时就不能简单的抛弃当前TLAB,这11KB会被安排到Eden区进行申请。
尝试栈上分配
失败
失败:剩余空间小于当前对象占用空间
成功
Eden区剩余空间是否可以大于当前对象占用空间
TLAB分配成功
堆上Eden区分配成功
小于
开启TLAB分配,默认开启
堆上老年代分配
栈上分配成功
对象分配内存
是否小于最大浪费空间(refill_waste_limit)
加锁,重新从Eden区申请一个TLAB尝试存储对象
堆上Eden区分配(指针碰撞/空间列表)
TLAB分配
执行一次YoungGC
0 条评论
下一页