Poly / ML运行时调整堆大小

时间:2013-04-17 02:36:54

标签: ml polyml

我在Poly / ML中的堆大小调整文章中读到了以下几个字。但我不明白堆的大小究竟是如何调整的?任何人都可以更详细地解释一下吗?

  

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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