2012-04-20 16 views
1

我正在試圖剖析我的應用程序,看看我可以調整內存管理和速度。我已經讀入垃圾收集和我試圖使用JRuby中GC :: Profiler.enable

GC::Profiler.enable 

在我的應用程序。然而,當我把這個JRuby中我得到一個

org.jruby.exceptions.RaiseException: (NameError) uninitialized 

我知道,垃圾收集在JVM做了JRuby的 - 所以這可能是爲什麼它沒有被初始化這是合理的,什麼是替代在Jruby中使用?

回答

3

這是一個MRI特定的API - JRuby沒有相應的API,可能是由於JVM的工作方式(有大多數VM有多個GC策略,並且沒有與GC一起工作的一致API,即使是System.gc()調用也不會必要時立即觸發垃圾收集)。

但有一個非標準的監測API(稱爲MX)可用於Java應用程序和因爲你的JRuby應用程序是一個Java應用程序,你可以使用這些,當然,你可能需要了解一些內部的例如JVM如何看待你的ruby類,但這並不難。

試試這裏開始的:http://www.engineyard.com/blog/2010/monitoring-the-jvm-heap-with-jruby/

下面是可用的Java工具的總結,你可以使用JRuby使用,以及:http://blog.headius.com/2010/07/browsing-memory-jruby-way.html

不要忘記檢查維基爲好,例如有一個分析對象分配的頁面: https://github.com/jruby/jruby/wiki/Profiling-Object-Allocations

+0

感謝您的評論,真的有幫助 - 我認爲結果將是所有上述的混合。儘管如此,我可以在應用程序中看到這些細節! – 2012-04-23 06:48:45