我在Poly / ML中的堆大小调整文章中读到了以下几个字。但我不明白堆的大小究竟是如何调整的?任何人都可以更详细地解释一下吗?
在每个主要GC(垃圾收集)结束时,adjustHeapSize() 方法被调用。此方法动态地改变堆大小 有一定数量的可用空间。也就是说, 假设成熟空间紧接着包含l MB的实时数据 GC,然后adjustHeapSize()将成熟空间大小改为K + l MB, 其中K是预先计算的常量。 K是的价值 gc.cpp中的majorGCFree静态变量,设置为的大小 Poly / ML运行时开始执行时的成熟空间。
据我所知,每个GC后都有一定数量的可用空间。但是如何获得堆大小的下一个计算值?什么是K以及K如何计算?为什么将其设置为 K + l ?
答案 0 :(得分:2)
这是旧的内存管理机制,已在5.5版中完全取代。你引用的论文是导致当前版本的一些实验性工作。
在旧版本中,初始堆大小设置为-H参数中给定的值,该值默认为物理内存的一半。粗略地说,K就是这么大。将堆大小设置为K和实时数据大小的原因是,这意味着在每个GC之后都有K空间可用。可用空间量大致决定了每个GC之间的时间。
这是相当粗糙的,新版本调整堆大小以保持GC时间与mutator(应用程序)时间的比率大致恒定,在上限和下限之内。