Jac*_*cky 9 garbage-collection jvm object immutability
我知道JVM GC喜欢短期对象的原因,因为它可以在次要GC中收集.但是为什么JVM GC喜欢不可变对象呢?
编辑:查理亨特说,GC在他的演讲中喜欢不可变的对象.
谢谢
如果GC可以知道对象不包含对任何gen0对象的任何引用,则在执行gen0集合时可以忽略它.同样,如果一个对象不包含对任何gen0或gen1对象的任何引用,则在执行gen1集合时可能会忽略它.在集合期间可以忽略的对象越多,集合就越快.
如果一个对象在gen0 GC中存活,则可以确定它所拥有引用的任何gen0对象都将被提升为gen1; 同样,如果一个不包含任何gen0引用的对象在gen1 GC中存活,那么它包含的任何gen1引用都将被提升为gen2.因此,一旦在gen0集合期间检查了一个对象,就不需要再次检查它,直到下一代gen1集合,除非它被修改.同样,在gen1集合期间检查的对象不需要在下一代gen2集合之前进行检查,除非它被修改.
知道对象是否被修改是一个棘手的主题,但关键是如果没有对象,它对GC非常有利.