新生代各个分区的默认空间比例是怎样的?
在HotSpot虚拟机中,新生代(Young Generation)的默认内存划分比例是:
- Eden区:占新生代总空间的8/10,也就是80%。
- Survivor区:两个Survivor区(Survivor 0和Survivor 1)各占新生代总空间的1/10,也就是10%。
也就是说,Eden区和两个Survivor区的默认比例大约是8:1:1。
这个比例可以通过JVM的参数-XX:SurvivorRatio来调整。例如,如果你希望Eden区和Survivor区的比例是6:1:1,可以设置-XX:SurvivorRatio=6。
这个默认比例是基于经验得出的,大多数情况下,新创建的对象会很快变得不可达并被回收,所以Eden区被分配了更多的空间。而Survivor区的空间较小,主要用于存放从Eden区复制过来仍然存活的对象。
需要注意的是,虽然两个Survivor区的总空间占新生代的2/10,但在任何时候,两个Survivor区只有一个被使用,另一个是空闲的。这是因为在进行Minor GC时,存活的对象会在两个Survivor区之间来回复制。例如,一次GC后,存活对象被复制到Survivor 0,下一次GC时,存活对象会被复制到Survivor 1,Survivor 0则被清空。