看到一段话:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件成立,那么Minor GC可以确保是安全的。如果不成立,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小
为什么是要连续的空间大于新生代所有对象总空间?我怎么觉得是老年代连续的空间大于新生代的最大对象需要的空间,而不是“新生代所有对象总空间”? 所有的新生代对象必须要放在连续的空间上吗?
而这句话“继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小”,这个平均大小是指单个对象的平均大小还是所有对象之和的平均大小?
这句话出自<<深入理解Java虚拟机>>第二版,你需要看完这本书的垃圾收集算法,才知道为什么.简单的说你错在哪呢,如果新生代所有的对象都在链上不可回收呢?
确定哪些对象可以回收通常有两种算法,一种是引用计数,一种是可达性分析算法.HotSpot采用的就是第二种.第二种会通过一些称为GC Root的对象.可作为GC Roots的对象包括下面几种:
这些引用会形成一条链,凡是在链上的说明还在使用,不可回收.