垃圾回收交给Java虚拟机有几个好处:
1、可以提高生产率。再一个不具有垃圾收集机制的语言下编程时,你可能需要花费好多时间来加班解决难以捉摸的内存问题。当使用Java编程时,你就可以更有效地利用这些时间。
2、能帮助程序保持完整性。垃圾收集是Java安全策略的一个重要部分,Java程序员不可能因失误错误地释放内存而导致Java虚拟机崩溃。
还有一个潜在的缺陷:它的存在加大了程序的负担,可能影响程序性能。Java虚拟机必须追踪哪些对象被正在执行的程序所引用,而且动态地终结并释放不再被使用的对象。
引用计数收集器:
引用计数是垃圾收集的早期策略。好处是,引用计数收集器可以很快地执行,交织在程序的运行之中,坏处是,引用计数无法检测出循环。并且,每次引用计数的增加或者减少都带来额外的开销。
跟踪收集器:
基本的追踪算法被称作“标记并清除”。这个名字指出垃圾收集过程的两个阶段。在标记阶段,垃圾收集器遍历引用树,标记每一个引用的对象。在清除阶段,未被标记的对象被释放了,使用的内存被返回到正在执行的程序,再Java虚拟机中,清除步骤必须包括对象的终结。
压缩收集器
拷贝收集器
标记并清除收集器通常使用的两种策略,用来对付堆碎块。拷贝收集器的缺点是,对于指定大小的堆来说需要两倍大小的内存,因为任何时候都只能使用其中的一半。
按代收集的收集器
是对拷贝收集器的优化,将对象按寿命分成不同的子堆,减少对象的拷贝次数。
自适应垃圾收集器
自适应算法监视堆中的情形,并且对应地调整为合适的垃圾收集技术。
火车算法
火车算法是一种渐进式收集算法。渐进式垃圾收集器就是不试图一次性发现并回收所有不可触及的对象,而是每次发现并回收一部分。通常渐进式收集器都是按代收集的收集器,大部分调用中都是收集堆的一部分。火车算法正用于Sun公司的Hotspot虚拟机中,该算法详细说明了按代收集的垃圾收集器的成熟对象空间组织。火车算法的目的是为了在成熟对象空间提供限定时间的渐进收集。