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