科技达人说|写得非常好,图解Java垃圾回收机制( 二 )


世代垃圾收集过程
现在你已经理解了为什么堆被分成不同的代 , 现在是时候看看这些空间是如何相互作用的 。 后面的图片将介绍JVM中的对象分配和老化过程 。 关注Java技术栈微信公众号 , 回复:JVM46 , 可以获取一份超全JVM调优攻略 。
首先 , 将任何新对象分配给eden空间 。 两个survivor空间都是空的 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
当eden空间填满时 , 会触发轻微的垃圾收集 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
引用的对象被移动到第一个survivor空间 。 清除eden空间时 , 将删除未引用的对象 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
在下一次MinorGC中 , Eden区也会做同样的操作 。 删除未被引用的对象 , 并将被引用的对象移动到Survivor区 。 然而 , 这里 , 他们被移动到了第二个Survivor区(S1) 。
此外 , 第一个Survivor区(S0)中 , 在上一次MinorGC幸存的对象 , 会增加年龄 , 并被移动到S1中 。 待所有幸存对象都被移动到S1后 , S0和Eden区都会被清空 。 注意 , Survivor区中有了不同年龄的对象 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
在下一次MinorGC中 , 会重复同样的操作 。 不过 , 这一次Survivor区会交换 。 被引用的对象移动到S0, 。 幸存的对象增加年龄 。 Eden区和S1被清空 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
此幻灯片演示了promotion 。 在较小的GC之后 , 当老化的物体达到一定的年龄阈值(在该示例中为8)时 , 它们从年轻一代晋升到老一代 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
随着较小的GC持续发生 , 物体将继续被推广到老一代空间 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
所以这几乎涵盖了年轻一代的整个过程 。 最终 , 将主要对老一代进行GC , 清理并最终压缩该空间 。
科技达人说|写得非常好,图解Java垃圾回收机制
文章图片
原文:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
译文:https://www.oschina.net/translate/java-gc
【科技达人说|写得非常好,图解Java垃圾回收机制】翻译:Rhys_Lee,AzureSora,溪边九节,小小菜鸟鸡


推荐阅读