1

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

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

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

4

1 回答 1

2

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

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

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

于 2013-04-25T11:33:59.567 回答