代码之家  ›  专栏  ›  技术社区  ›  whileone

Poly/ML运行时调整堆大小

  •  1
  • whileone  · 技术社区  · 11 年前

    我在Poly/ML中读到了一篇关于堆大小调整的论文中的以下单词。但我不明白堆的大小到底是怎么调整的?有人能更详细地解释一下吗?

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

    我知道每次GC之后都有一定的可用空间。但是如何获得堆大小的下一个计算值呢?什么是K,K是如何计算的?为什么要设置为 钾+升 ?

    1 回复  |  直到 8 年前
        1
  •  2
  •   David Matthews    11 年前

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

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

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