1、如何区分新生代和老生代?划分比例?
参考书籍:《深入理解Java虚拟机》
在经典分代的设计下,新生对象通常会被分配在新生代中,少数情况下(如对象大小超过一定阈值)也可能会直接分配在老年代。
新生代Eden区和两个survivor区的比例是8:1:1——参数:-XX:Survivor-Ratio=8
2、空间分配担保?
3、为什么新生代用复制,老年代用标记清除或者标记整理
Q1:为什么新生代用标记-复制?
A1:因为新生代中的对象熬不过第一轮收集,存活的对象较少。
Q2:为什么老年代用标记-清除/标记-清理?
- 标记-复制算法在对象存活率较高时需要进行较多的复制操作,效率会降低。
- 如果不想浪费50%的空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有对象都存活的极端情况。
4、CMS(Concurrent Mark Sweep)的过程
用的是标记-清理算法。