14.1、前文回顾
上一篇文章通过一个实际案例,深入剖析了新生代的对象分配机制,以及对象如何被迁移到老年代。我们还探讨了一个会频繁触发Full GC的场景,并提供了针对性的优化策略,相信大家对JVM的核心运行原理已经理解得相当透彻。
在本文中,我们将讨论一个让Java工程师们深感困扰的问题:当我们的Java系统基于JVM运行时,究竟什么是最让我们感到痛苦的问题?
14.2、新生代GC场景回顾
大家先来看下面的图,新生代的内存大家都知道是分为Eden和两个Survivor的。
那么此时如果系统不停的运行,然后把Eden给塞满了呢?如下图所示:
在这个阶段,必然会触发Minor GC。之前我们已经讨论过,垃圾回收是由专门的垃圾回收线程来完成的。而且,不同的内存区域会由不同的垃圾回收器来处理。大家还记得这个知识点吗?实际上,垃圾回收线程和垃圾回收器是紧密合作的。它们利用自己独特的垃圾回收算法,对指定的内存区域进行垃圾回收。大家看看下图。
通过上面这个图,我们是否已经对垃圾回收线