🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. 新生代(Minor GC) 新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。 * 因为存在跨带引用,**remember set记忆集**(标识出跨代引用) * **记忆集**使得垃圾回收时不用扫描整个老年代 *   HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to),占内存比例是8:1:1 * 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。 1. 在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区“To”是空的。 2. 紧接着进行GC,Eden区中所有存活的对象都会被复制到“To”,而在“From”区中,仍存活的对象会根据他们的年龄值来决定去向。年龄达到一定值(年龄阈值,可以通过-XX:MaxTenuringThreshold来设置)的对象会被移动到年老代中,没有达到阈值的对象会被复制到“To”区域。 3. 经过这次GC后,Eden区和From区已经被清空。这个时候,“From”和“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。**不管怎样,都会保证名为To的Survivor区域是空的。** Minor GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。 ![](https://img.kancloud.cn/39/22/3922fb4dc21719af48ef528dd80143f0_829x345.png) # 2. 老年代 * 大对象默认进入老年代 # 3. 混合收集(Mixed GC) 指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收 集器会有这种行为。 # 4. 整堆收集(Full GC) 收集整个Java堆和方法区的垃圾收集。