垃圾收集器如何检测垃圾?

时间:2014-06-18 20:46:08

标签: java garbage collectors

有人能用简单的词语向我解释一下JAVA垃圾收集器如何理解哪一部分内存是“垃圾”?

我知道垃圾收集器实际上在做什么,但是如何识别''垃圾''?

3 个答案:

答案 0 :(得分:2)

有许多策略,但一般来说它遍历对象图(通过从称为GC根的特殊对象开始)并标记它可以在图中找到的那些对象。堆中未标记的任何对象本质上是垃圾,因为它无法从对象图中的任何其他对象访问。

要获得更详细的治疗,请查看Oracle's documentation on the JVM's garbage collectorthis article

答案 1 :(得分:1)

在Java虚拟机中,所有数据都是键入的,这意味着JVM可以区分引用与其他数据。能够区分引用与其他数据是垃圾收集的必要条件。

垃圾收集器遍历堆,堆栈和常量池,搜索引用。通常,标记所有引用的对象。然后遍历标记的对象以进行引用,然后标记引用的对象。

如果没有留下未遵循的引用,您可以确保所有未标记的对象都不再可访问且可以处理。

这可能是垃圾收集的最基本形式,称为标记和清除垃圾收集器。

请注意,Java标准不要求存在垃圾收集器。实现标准的JVM也可以永远不释放任何内存。

答案 2 :(得分:0)

这里必须有一百个答案,但也许没有一个简单 - 有很多复杂的方法来解释这个:)。我会尝试一下,这样你就可以在这个问题被标记为重复之前看到它。

  1. 它需要它知道你的东西"旺旺"像一个可见的窗口或 活跃的线程。在更复杂的答案中有明确指出的这些事项清单。
  2. 列出了这些重要点可以访问的内容。
  3. 删除其他所有内容。