【问题标题】:java performance within jrubyjruby中的java性能
【发布时间】:2010-09-06 19:05:50
【问题描述】:

用 Java 编写的算法应该比用 JRuby 编写的算法快,对吧?

但是,如果我用 Java 编写算法,然后从 JRuby 中调用它,我仍然可以获得 java 的性能优势吗?

我问这个是因为我正在为我的 JRuby on Rails 应用程序编写一个非常复杂的实用程序类,并且需要选择是使用 Java 还是 JRuby。

所以,如果我使用以下代码:

class UtilitySampleWrapper
  include Java
  require 'utility.jar' #could also use .js class files if that makes a difference

  def initialize
    @p = Utility.new #this is the java utility class
  end

end

是否会在 Utility 类的 @p 对象中运行的任何代码都在纯 java 中运行并具有所暗示的所有速度优势?

如果我打电话

@p.iterate(50)

Utility 类的迭代函数会在纯 Java 中运行,然后将其结果返回给我的 JRuby 代码吗?

谢谢!

【问题讨论】:

    标签: java jruby performance


    【解决方案1】:

    用 Java 编写的算法应该比用 JRuby 编写的算法快,对吧?

    这取决于您编写 Java 版本的好坏。 理论上也有可能,对于某些算法,JRuby 编译器可以发出比 Java 编译器为功能等效的 Java 程序发出的运行速度更快的字节码。

    但通常我希望手动优化的 Java 算法比手动优化的 JRuby 算法运行得更快,因为:

    • Java 和 JRuby 字节码编译器的相对成熟度,
    • 正在调整 JIT 编译器以优化 Java 程序的典型字节码,并且
    • JVM 字节码架构更适合 Java。

    我不知道差异有多大。显然,这将取决于进行手部优化的人/人的技能。

    但是,如果我用 Java 编写算法,然后从 JRuby 中调用它,我仍然可以获得 java 的性能优势吗?

    可能是的,但有一些可能的原因可能不是这种情况:

    • 您可能需要在调用边界处在等效的 Java 和 Ruby 类/类型之间进行转换,并且转换成本可能会抵消使用 Java 重新编码的好处。
    • 真正的性能瓶颈可能根本不在此算法中。

    在开始用 Java 重新编写 JRuby 代码的练习之前,您应该做一些测试,看看这是否值得练习;例如应用程序是否已经足够快地运行?然后,您应该分析应用程序以查看应用程序是否真的将所有时间都花在算法上。最后,您应该看看是否可以在 JRuby 中优化算法。 (例如,如果您可以将 O(N**2) JRuby 算法替换为 O(N) JRuby 算法,那么这比用 Java 重新编码原始算法要好。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多