面试题:新生代中有1个Eden区和2个Survivor区,那么为什么会有2个Survivor区?可以减少一个吗?
面试题常规回答
新生代使用的是标记复制算法,创建的对象先在Eden区分配内存,Eden区满了之后就进行一次Young GC,将剩下存活的对象复制到其中一个Survivor区,如果Survivor区放不下,这些存活对象就直接进入了老年代空间。然后系统继续在Eden区分配内存,等到Eden区再次满了之后,又会进行一次Young GC,这个时候就将Eden区和前面的Survivor区中剩下的存活对象复制到另外一个Survivor区,如此循环往复。所以这样看来,是没有办法减少一个Survivor区的。
面试题深入剖析
上面的回答基本就是新生代的Young GC的过程了。其实就是把新生代的内存区域划分为三块内存区域:1个Eden区,2个Survivor区,其中Eden区占80%内存空间,每一块Survivor区各占10%内存空间。然后只使用到了1个Eden区和1个Survivor区。分配内存的时候,如果Eden区满了的时候,就把Eden区和这块Survi