[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之4 分代的垃圾回收过程

11 篇文章 0 订阅

分代的垃圾回收过程

现在我们知道了为什么堆被分为不同代,那么用一点时间来看看这些不同代之间是如何交付的.下面的这些图片描述了在JVM中.对象的分配和变老的过程.
1.任何新创建的对象都在eden区分配,2个survivor都是空的.
这里写图片描述

2.当eden区满了,会触发一次minor gc
这里写图片描述

3.此时还被引用的对象会移到第一个Survivor区S0.清除Eden区时,未被引用的对象被删除
这里写图片描述

4.在下次minor gc时,在eden区发生同样的事情.未被引用的对象被清除,被引用的对象被移到survivor区.不同的是,在这种情况下,它们被移入第2个survivor区 S1.除此之外,上次MINOR GC在 S0中存活的对象,变老了,并被移入到S1.当所有存活的对象都被移入到S1后,S0和eden区被清空了.注意观察下图中不同动向如何变老的.
这里写图片描述

5.下次minor gc,同样重复上面的过程.但是survivor区被调换了.被引用的对象被移入到S0, 存活对象变老了.eden区和S1被清空了.
这里写图片描述
6.下图展示了”提升/晋升”过程.在一次minor gc执行完后,年老的对象达到了特定的年龄阈值(比如8),这些对象从年轻代晋升到年老代.(译注:可以通过JVM参数:-XX:MaxTenuringThreshold=8 设置.)
这里写图片描述

7.随着更多的minor gc,更多的对象会晋升到年老代.
这里写图片描述

8.接着更多的对象从年轻代晋升到老年代.最终触发一次major gc用于清除和压缩年老代.

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值