【问题标题】:Poly/ML runtime resizing of Heap堆的 Poly/ML 运行时调整大小
【发布时间】:2013-04-09 15:37:51
【问题描述】:

我在一篇关于 Poly/ML 中堆大小调整的论文中读到了以下内容。但我不明白堆的大小是如何调整的?谁能详细解释一下?

在每次主要 GC(垃圾收集)结束时,adjustHeapSize() 方法被调用。此方法动态改变堆大小,因此 有特定数量的可用空间。也就是说, 假设成熟空间紧随其后包含 l MB 的实时数据 一次 GC,然后 adjustHeapSize() 将成熟空间大小变为 K +l MB, 其中 K 是预先计算的常数。 K 是 gc.cpp 中的 majorGCFree 静态变量,设置为 Poly/ML 运行时开始执行时的成熟空间。

我了解每次 GC 后都有一定数量的可用空间。但是如何获得堆大小的下一个计算值?什么是 K 以及如何计算 K?为什么要设置为 K + l

【问题讨论】:

    标签: ml polyml


    【解决方案1】:

    这是旧的内存管理机制,在 5.5 版本中已完全替换。您引用的论文是一些导致当前版本的实验性工作。

    在旧版本中,初始堆大小设置为 -H 参数中给出的值,默认为物理内存的一半。粗略地说,K就是那个大小。将堆大小设置为 K 和活动数据大小之和的原因是,这意味着每次 GC 之后都有 K 个空闲空间。可用空间的大小大致决定了每次 GC 之间的时间。

    这是相当粗略的,新版本调整了堆大小以保持 GC 时间与 mutator(应用程序)时间的比率大致恒定,在上限和下限内。

    【讨论】:

    • 你有链接支持你的解释吗?
    猜你喜欢
    • 2011-03-29
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多