1、前文回顾
略。。。
2、复制算法的背景引入
略。。。
3、一种不太好的垃圾回收思路
标记清除算法-碎片多
4、一个合理的垃圾回收思路 :
假设新生代内存,一半用来放新对象,一半用来存放从另一半垃圾回收后复制来的存活对象
标记复制-标记存活对象,复制到空内存中 。复制算法适用在新生代,存活对象很少,复制代价小。存活对象多的不太合适,复制代价太高。
5、复制算法有什么缺点?
浪费空间
6、复制算法的优化:
1个 Eden区和2个Survivor区
优化后复制算法:新生代可能99%的对象都是朝生夕死,存活对象很少,所以可以采用Eden、S0、S1区域划分,每次Young GC ,一般情况下S0和S1都会‘空’<->‘非空’交替变化,
默认:Eden:S0:S1 = 8:1:1
7、新生代垃圾回收的各种“万一”怎么处理?
存活对象>S区大小怎么办?
分配了大对象,对象在Eden区放不下怎么办?
对象在新生代倒腾几回才会到老年代?
回过头复习的同学应该烂熟于心了,第一次看的,接着看后面的总结