理想的垃圾收集器必须是安全的,即准确查找活对象并回收死对象,不会错误回收活对象。垃圾回收器已经明确从root set开始查找活对象,在引用链上的对象是活对象,不在引用链上的对象是死对象。
垃圾收集器不会长时间暂停应用程序,需要权衡堆大小、垃圾收集时间、垃圾收集频率。堆太小,堆很快被填满,垃圾收集时间越快,垃圾收集频率越频繁;堆太大,垃圾收集时间越慢,垃圾收集频率越低。
垃圾收集器是否考虑内存碎片也是一个很重要的因素。对内存碎片进行压缩可以使堆保留连续的内存空间,连续的内存空间可以用来分配大对象。