引用《深入理解Java虚拟机》中的话:首先,Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定。 当前商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。不过无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。 也就是说分代收集是目前找到的能更好地回收内存,或者更快地分配内存的最佳方案。其中介绍的几款 GC 全部是基于分代收集的(包括 G1),对于介绍的几种垃圾收集算法(标记-清除、复制、标记-整理)在分代收集下会有更高的效率。
引用《深入理解Java虚拟机》中的话:
首先,Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定。
也就是说分代收集是目前找到的能更好地回收内存,或者更快地分配内存的最佳方案。
其中介绍的几款 GC 全部是基于分代收集的(包括 G1),对于介绍的几种垃圾收集算法(标记-清除、复制、标记-整理)在分代收集下会有更高的效率。