java - Java中老年代部分的垃圾收集

标签 java garbage-collection

来自 Oracle 文档:

The Old Generation is used to store long surviving objects.

Typically, a threshold is set for young generation object and when that age is met, the object gets moved to the old generation.

Eventually the old generation needs to be collected. This event is called a major garbage collection.

Often a major collection is much slower because it involves all live objects. So for Responsive applications, major garbage collections should be minimized.

顾名思义垃圾收集,这里的垃圾指的是未引用的对象(不再需要的对象)。

对于这一行:“主要集合通常要慢得多,因为它涉及所有 Activity 对象。”

Activity 对象是那些引用仍然存在的对象。那么,为什么主要 Collection 品包括活物呢? (主要收集必须仅涉及死对象)。

最佳答案

与实际的垃圾收集不同,Java GC 主要处理 Activity 对象。这更像是扔掉一个垃圾填埋场并捡起所有需要的东西。

原因是没有直接的方法来识别垃圾。所知道的是,找到对象的 Activity 引用意味着它不是垃圾。

when is the garbage going to be touched

实际上从来没有:一个全面的收集器是这样工作的:

  • 它找到所有生命对象
  • 将它们移到其他地方
  • 更新所有对它们的引用

剩下的是可用内存。垃圾就留在那里,没有人关心。

这是次要集合效率的关键。大多数对象都会在很短的时间内死亡,并且只接触幸存者,开销很小。

死对象永远不会被触及,带有finalize或引用队列的对象除外。除非您确实知道自己在做什么,否则不要使用finalize。你永远不能依赖它。

关于java - Java中老年代部分的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25826704/

相关文章:

内部引用对象上的 Javascript 垃圾收集器

java - Java 示例的奇怪行为

java - Spring Tool Suite无法导入spring库类

c# - 垃圾收集器不会收集使用创建的对象

javascript - 垃圾收集和 JavaScript "delete": Is this overkill/obfuscation, 还是一个好的做法?

ios - 什么时候应该在 MonoTouch build设置中启用 “reference counting extension”?

java - 简单的 CLI Java 程序不断消耗越来越多的内存

java - 错误: plug-in not found: RefasterRuleCompiler

java - 是否可以从两个不同的 Servlet 同时访问同一个数据库?

java - 使用 Moyosoft Outlook Connector 时出现 ComponentObjectModelException