0
点赞
收藏
分享

微信扫一扫

JVM——堆

孟祥忠诗歌 2022-03-11 阅读 74
java

JVM——堆

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
“-Xms"用于表示堆区的起始内存,等价于-XX : InitialHeapsize“
-Xmx"则用于表示鞫区的最大内存,等价于-XX:MaxHeapsize“

年轻代与老年代

对象分配的过程

在这里插入图片描述

我们会有一个年龄计数器为存放的对象计数(from和to区)谁空谁是to区

幸存者区内存满时不会触发YGC,而伊甸园区满的时候触发YGC会将幸存者区一起回收,所有幸存者区属于被动回收。

在这里插入图片描述
流程:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么需要把Java堆分代?不分代就不能正常工作了吗?
因为在创建对象完之后,有很多对象都是朝生夕死的,如果我们把生命周期长的对象放在一起,那么我们GC垃圾处理就要从中大范围的搜索无用对象进行回收,这大大降低了效率,如果进行分区,我们就会先让GC先直接找无用对象的区域,这样就能大大提高效率。

内存分配策略(或对象提升(Promotion)规则)

在这里插入图片描述
在这里插入图片描述

为对象分配内存:TLAB

为什么有TLAB ((Thread Local Allocation Buffer ) ?

什么是TLAB?
为每个线程分配一个私有的缓存地址,并且这个地址是存在Eden区域中的,占Eden1%的内存。

尽管不是所有的对象实例都能够在TLAB中成功分配内存,但JVM确实是将TLAB作为内存分配的首选
-XX:UseTLAB”设置是否开启TLAB空间。
在这里插入图片描述
先通过TLAB,看对象大小是否能分配,不能分配就交和Eden区。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
堆是分配对象存储的唯一选择吗?
栈上分配:
在这里插入图片描述
在这里插入图片描述
二、同步省略
在这里插入图片描述

三、分离对象或标量替换。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2a616dac1fa424dac135a97a5dcf379.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54ix5ZCD6KW_57qi5p-_54KS6JuL,size_20,color_FFFFFF,t_70,g_se,x_16
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

【jvm】堆

jvm - 堆

JVM 栈堆

JVM-堆

jvm-堆

jvm堆默认行为

06-jvm-堆

0 条评论