2011-02-13 23 views
19

我知道GC.enable/disable,但有沒有什麼辦法控制紅寶石1.9更詳細的垃圾回收器?紅寶石1.9垃圾收集器調整

當分析我的代碼(使用perftools.rb)時,我注意到GC代表了總樣本的30%,我想看看是否可以調整GC以減少此數量。是否有任何環境變量或其他方法可用於設置堆槽數量,malloc限制等,就像您可以使用REE一樣?

回答

1

無法調整1.9.0-1.9.2 GC。但是,您可以編譯一個自定義的虛擬機,該虛擬機顯示的調整參數差不多與調用參數爲this patch的REE相同。

11

是的,簡而言之。

首先,基本常數,定義GC行爲(默認值被示出):

  • RUBY_GC_MALLOC_LIMIT = 8000000# - 一個新的存儲器板,其被消耗所有可用的存儲器
  • 之後分配的初始大小RUBY_HEAP_MIN_SLOTS = 10000# - 在啓動時分配的初始內存大小
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR = 1,8# - 每次分配後,新內存塊比前一次大X倍。
  • RUBY_HEAP_SLOTS_INCREMENT = 1#不知道,說實話:)

More details about GC, may help

A story from 37signals的傢伙,這可以明確地幫助你。他們按時使用手動GC調用(GC.start),而不是內存大小,並獲得了巨大的提升。

+0

阿曼和喬在他們的演示中談論這些常量,但從我能告訴他們實際上我在我的問題中提到的相同REE設置。我錯了,還是可以給我一個如何在vanilla Ruby 1.9 VM中使用它們的例子? – Theo 2011-02-19 13:39:57

+0

我很確定這是1)只有1.8.7和2)即使在1.8.7上也需要你修補和編譯一個自定義的虛擬機。在1.9.2版本中有一個新的補丁,它在你的答案之後很久才發佈,但它仍然需要你編譯一個自定義的虛擬機。 – Theo 2011-03-14 20:47:37