——jvm为什么年轻代一定要划分成两个区域,为什么老年代不分,为什么一定要分代。
1、为什么要分代:
分代的唯一理由就是优化GC性能。如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。
2、对于年轻代分区:
年轻代使用的复制算法,这就要求年轻代要分成两个区域:Eden空间以及Survivor空间。而对于老年代,书P71说明了“复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会变低”。所以老年代不使用复制算法,所以不用分区域。
参考:https://blog.csdn.net/zp357252539/article/details/52197708