繁体   English   中英

Java GC停止并复制

[英]Java GC Stop and copy

这个问题是我之前的Java GC问题的后续活动: Java Garbage Collector澄清

这个问题也指的是同一篇文章。

我对为什么对对象堆分配进行碎片整理的stop and copy方法如此常用感到有些困惑。 是的,它对堆进行了碎片整理,但是似乎有很多开销,因为基本上可以将堆大小的总和减少一半。 当一半空间用完时,您还需要复制所有活动对象。

除了碎片整理,还有其他根本原因导致“停止并复制”比说“标记并清除”更好吗?

实际上,碎片化最基本的,某些GC击败它的能力是相当重要的。

停止复制算法曾经在GC实现中流行,因为:

  1. 实现起来很简单;
  2. 它会自动对内存进行碎片整理;
  3. 它的运行时间与活动物体的数量成正比,这使得它渐近地非常有效。

较现代的GC(包括Java中使用的GC)使用更复杂的策略,因为它们想使短暂的暂停 (而不是使GC的总时间变 ,他们宁愿从不停止长时间的应用程序,因为暂停不利于交互性) ,以便与缓存和虚拟内存进行更清晰的交互,并受益于具有多个CPU的系统。

琼斯和林斯的书对于任何想了解垃圾收集的人来说都是必读的。

关于垃圾收集器的一个很棒的教程是Tuning Garbage Collection (不幸的是,新的oracle网站将其格式化变得非常混乱)。

您的问题在第五章中进行了处理。这基本上解释了可以在Java垃圾收集器中使用的策略类型,以及哪些是默认策略。 大多数桌面应用程序都会对尽可能小的停止感兴趣,因为这可能会引起用户注意。

请注意,您的问题与碎片整理无关。 两者最终都会压缩内存空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM