[英]Java GC Stop and copy
这个问题是我之前的Java GC问题的后续活动: Java Garbage Collector澄清
这个问题也指的是同一篇文章。
我对为什么对对象堆分配进行碎片整理的stop and copy方法如此常用感到有些困惑。 是的,它对堆进行了碎片整理,但是似乎有很多开销,因为基本上可以将堆大小的总和减少一半。 当一半空间用完时,您还需要复制所有活动对象。
除了碎片整理,还有其他根本原因导致“停止并复制”比说“标记并清除”更好吗?
实际上,碎片化是最基本的,某些GC击败它的能力是相当重要的。
停止复制算法曾经在GC实现中很流行,因为:
较现代的GC(包括Java中使用的GC)使用更复杂的策略,因为它们想使短暂的暂停 (而不是使GC的总时间变短 ,他们宁愿从不停止长时间的应用程序,因为暂停不利于交互性) ,以便与缓存和虚拟内存进行更清晰的交互,并受益于具有多个CPU的系统。
琼斯和林斯的书对于任何想了解垃圾收集的人来说都是必读的。
关于垃圾收集器的一个很棒的教程是Tuning Garbage Collection (不幸的是,新的oracle网站将其格式化变得非常混乱)。
您的问题在第五章中进行了处理。这基本上解释了可以在Java垃圾收集器中使用的策略类型,以及哪些是默认策略。 大多数桌面应用程序都会对尽可能小的停止感兴趣,因为这可能会引起用户注意。
请注意,您的问题与碎片整理无关。 两者最终都会压缩内存空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.