我正在尝试分析我的应用,看看我可以调整内存管理和速度。我已阅读垃圾收集,我正在尝试使用
GC::Profiler.enable
在我的应用中。然而,当我在Jruby中调用它时,我得到了一个
org.jruby.exceptions.RaiseException: (NameError) uninitialized
我知道垃圾收集是在Jruby上的JVM中完成的 - 所以这可能就是为什么它没有初始化哪个有意义,在Jruby中使用的替代方法是什么?
答案 0 :(得分:3)
这是一个特定于核磁共振的API - JRuby没有相应的API可能是由于JVM的工作方式(大多数虚拟机都有多种GC策略,并且没有一致的API可以与GC一起使用,甚至是System.gc()
调用不必立即触发垃圾收集)。
但是有一个标准的监控API(称为 MX )可用于Java应用程序,并且由于您的JRuby应用程序是Java应用程序,您可以使用它们,当然您可能需要了解一些内部结构,例如: JVM如何看待你的ruby类,但并不难。
从这里开始尝试:http://www.engineyard.com/blog/2010/monitoring-the-jvm-heap-with-jruby/
以下是可用于JRuby的Java工具的摘要:http://blog.headius.com/2010/07/browsing-memory-jruby-way.html
不要忘记检查维基,例如有一个关于分析对象分配的页面: https://github.com/jruby/jruby/wiki/Profiling-Object-Allocations