Java垃圾收集背后的理论和算法

我在很多地方看过,但找不到我能学到的地方:

什么是Java垃圾收集?

它是如何实现的?

何时以及如何调用?

下面是什么算法来回收内存?

总之一切都是关于:)

固定!!!

一篇非常好的文章: http : //www.artima.com/insidejvm/ed2/gcP.html

答案的最短版本是:

什么是Java垃圾收集?

GC是一种内存管理机制,系统(在这种情况下为JVM)负责自动回收不再使用的内存。

它是如何实现的?

有各种方法来实现它。 一个简单的描述是跟踪分配的每个内存。 系统会定期检查分配的部分,以查看程序的任何部分(变量)是否仍然可以到达内存。 回收任何无法访问的内存。

何时以及如何调用?

这也取决于实施。 您在Java中唯一的保证是,在抛出OutOfMemoryError之前,系统将尝试回收内存。 我希望大多数GC实现在尝试为底层操作系统提供更多内存之前也尝试进行集合。 通常会有一个后台线程来处理运行收集器。

下面是什么算法来回收内存?

有几种可能的。 看看其他人发布的文章作为起点。

Wikipedia垃圾收集条目涵盖了您的所有问题:

http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

……总之一切都是关于:)

如果您可以访问一个好的图书馆,请查看这本关于垃圾收集的优秀而全面的书籍:

Richard Jones和Rafael Lins,Garbage Collection:自动动态内存管理算法,Wiley and Sons(1996),ISBN 0-471-94148-4

此外,这本书仍然印刷,并至少列在一个着名的在线书店。 到处走走。 它适用于各种价格的新款,低至25美元的秒针。

Sun ^ H ^ H ^ HOracle有关于该主题的大量文档。

垃圾收集技术使用MARK和SWEEP算法。

有关详细信息标记和扫描垃圾收集

关于GC在JavaRevisted和Algorithem中如何使用Java的更好的文章你可以在Dan提到wiki