Survivor区是什么
survivor区是jvm堆内存中eden区的配套区域,用于存放从eden区经过minor gc后仍然存活的对象。它由两个大小相等的子空间(from和to)组成,通过复制算法实现内存管理。

为什么需要两个Survivor区
使用两个Survivor区是为了避免内存碎片化并提高垃圾回收效率。每次Minor GC时,存活对象会在两个Survivor区间进行交换,确保内存连续分配。

public class SurvivorDemo {
public static void main(String[] args) {
// 创建大量对象以触发GC
for (int i = 0; i < 1000000; i++) {
new byte[1024];
}
System.gc();
}
}Survivor区如何影响对象晋升
当对象在Survivor区经历多次Minor GC后仍未被回收,且达到年龄阈值时,会被晋升到老年代。这一机制有效减少了Full GC的频率。
立即学习“Java免费学习笔记(深入)”;

public class PromotionDemo {
private static final int MAX_AGE = 15;
public static void main(String[] args) {
// 模拟对象晋升过程
Object obj = new Object();
for (int i = 0; i < MAX_AGE; i++) {
System.out.println("Age: " + i);
obj = null;
System.gc();
}
}
}


















