垃圾收集需要多少额外内存? [英] How much extra memory does garbage collection require?

查看:85
本文介绍了垃圾收集需要多少额外内存?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾经听说过一种语言要正确地执行和运行垃圾回收 ,平均需要3倍的内存。我不知道这是假设应用程序是小型的,大型的还是其他的。

所以我想知道是否有任何研究或实际数量的垃圾收集开销。另外我想说GC是一个非常不错的功能。

解决方案

您需要的内存空间大小取决于内部的分配率你的程序。如果你的分配率很高,在GC工作时需要更多的增长空间。

另一个因素是对象生命周期。如果你的对象通常只有很短的一生,那么你可以用一代代收集器来略微控制空间。



有许多研究论文可能会让你感兴趣您。编辑(2011年1月):



我正在考虑一篇我现在无法找到的具体论文。下面的内容很有趣,并包含一些相关的性能数据。作为一个经验法则,您通常可以使用大约两倍的程序驻留内存。有些程序需要更多,但其他程序即使在受限制的环境中也能很好地运行。有很多变数影响这个,但分配率是最重要的变量。


  1. Immix:一个标记区域垃圾收集器,具有空间效率,快速收集和增变器性能。


  2. 神话与现实:垃圾收集的性能影响



    <编辑(2013年2月):该编辑在引用的论文中增加了一个平衡的观点,并解决了Tim Cooper提出的反对意见。

    量化垃圾收集与显式的性能正如Natan Yellin所指出的,内存管理实际上是我在2011年1月首次尝试记住的参考。然而,我不认为纳坦提供的解释是正确的。该研究没有将GC与传统的手动内存管理进行比较。相反,它将GC与完美显式发布的oracle进行比较。换句话说,它让我们不知道传统的手动内存管理与魔法预言相比如何。这也很难找到,因为源程序要么用GC来编写,要么考虑到手动内存管理。所以任何基准都保留在固有偏差中。




  3. 继Tim Cooper的反对意见后,我想澄清一下我在内存空间的话题。我主要是为后人做这件事,因为我认为堆栈溢出答案应该成为许多人的长期资源。

    典型GC系统中有许多存储区域,但有三种抽象类型:


    • 分配的空间(包含活的,死的和未匹配的对象)
    • 保留空间(从中分配新对象)

    • 工作区域(长期和短期GC数据结构)


    什么是 headroom ?净空是保持所需性能水平所需的最小预留空间量。 我相信这是OP所要求的。 您也可以将余量视为实际程序驻留(最大实时内存)以获得良好性能的附加内存。



    是 - 增加净空可以延迟垃圾收集并提高吞吐量。这对离线非关键操作非常重要。



    实际上,大多数问题域需要实时解决方案。有两种实时,它们是非常不同的: b
    $ b


    • 硬实时涉及最坏情况下的延迟(对于任务关键系统) - 分配器的延迟响应是错误的。
      real-time涉及平均延迟或中值延迟 - 分配器的延迟响应可以,但不应该经常发生。
    • li>


    大多数最先进的垃圾收集器旨在实现软实时,这对桌面应用程序以及按需提供服务的服务器。如果一个人要求实时消除,那么不妨使用一个停止世界的垃圾收集器,其中 headroom 开始失去意义。 (注意:主要是短期对象和高分配率的应用程序可能是个例外,因为成功率很低。)现在假设我们正在编写一个具有软实时要求的应用程序。为了简单起见,我们假设GC在专用处理器上同时运行。假设该程序具有以下人工属性:


    • 均值居留权:1000 KB
    • 预留空间: 100 KB
    • GC循环持续时间:1000 ms




查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆