jruby中的java性能

时间:2010-09-06 19:05:51

标签: java jruby performance

用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类的iterate函数是在纯Java中运行,然后将其结果返回到我的JRuby代码吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

用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重新编码原始算法要好。)