1

我正在尝试分析我的应用程序,看看我可以在哪里调整内存管理和速度。我已阅读垃圾收集,我正在尝试使用

GC::Profiler.enable

在我的应用程序中。但是,当我在 Jruby 中调用它时,我得到了一个

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

我知道垃圾收集是在 Jruby 上的 JVM 中完成的——所以这可能就是为什么它没有被初始化这是有道理的,在 Jruby 中使用的替代方法是什么?

4

1 回答 1

3

这是一个 MRI 特定的 API - 可能由于 JVM 的工作方式,JRuby 没有等效的 API(大多数 VM 有多种 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

不要忘记检查 wiki,例如有一个关于分析对象分配的页面: https ://github.com/jruby/jruby/wiki/Profiling-Object-Allocations

于 2012-04-21T12:04:30.053 回答