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

17

我在很多地方阅读过,但没有找到一个可以学习以下内容的地方:

什么是Java垃圾回收?

它如何实现?

何时以及如何调用?

它遵循哪些算法以回收内存?

简单来说,关于它的一切 :)

修正!!!

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


我需要准备一个长答案,但是有很多不同种类的GC算法和语义(没有恶意)。 - Jé Queue
+1 个精彩链接 :-) - Amandeep Jiddewar
理解Java垃圾回收 - roottraveller
6个回答

10

简短回答如下:

Java垃圾回收是什么?

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

它是如何实现的?

有多种实现方式。简单来说,每个分配的内存片段都会被跟踪。定期地,系统检查已分配的片段,看看程序的哪些部分(变量)仍然可以访问该内存。任何无法访问的内存都会被回收。

什么时候以及如何调用它?

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

为了回收内存,Java GC采用了什么算法?

有几种可能的算法。请参考其他人发布的文章作为起点。


感谢评论,我会看看是否有一些好的文章,并通过链接更新帖子。 - daydreamer

2

2
如果您有一个好的图书馆,可以借阅这本关于垃圾回收的优秀且全面的书籍:Richard Jones和Rafael Lins的Garbage Collection: Algorithms for Automatic Dynamic Memory Management,Wiley and Sons(1996年),ISBN 0-471-94148-4。 此外,该书仍在印刷中,并列在至少一个知名在线书店上。 逛逛吧。 它的新书价格范围很广,二手书的价格低至25美元。简而言之,所有与此相关的内容 :)

感谢您提供这本书的参考! - daydreamer

1

Sun^H^H^HOracle在此主题上拥有广泛的文档。


1

0

JavaRevisted上有一篇更好的关于Java中GC如何工作的文章,而且正如Dan所提到的,你可以在wiki上找到相关算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接