简介

对象的年龄

通过经验总结,人们发现:大部分对象在生成后马上就变成了垃圾,很少有对象能活得很久

分代垃圾回收利用该经验,引入了“对象年龄”的概念,经过一次GC后活下来的对象年龄为1岁

新生代对象和老年代对象

分代垃圾回收中将刚生成的对象称为新生代对象,到达一定年龄的对象则是老年代对象

前面提过,新生代对象绝大部分都会马上变成内存垃圾,如果只对这些新生代对象执行GC,那么相比对所有对象执行GC就会快很多

另一方面,也会将存活了一定次数的新生代对象提升为老年代对象

优点

吞吐量得到改善

“新生代对象会很快变成垃圾”虽然只是经验之谈,不过还是适用于大多数情况的,以这个原则为前提,新生代GC只将刚生成的对象当成需要GC的对象,就能减少时间的消耗

缺点

在部分程序中会起到反作用

“新生代对象会很快变成垃圾”并非适用于所有程序,对象会活的很久的程序也很多,对这样的程序执行分代垃圾回收会导致:

  1. 新生代GC所花费的世界增多
  2. 老年代GC频繁运行

多代垃圾回收

分代垃圾回收将对象分为新生代和老年代,通过尽量减少从新生代晋升到老年代的对象,来减少在老年代对象上消耗的垃圾回收的世间

在这个基础上,将对象划分为多代的方法就是多代垃圾回收