用 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 代码中?
谢谢!
最佳答案
An algorithm written in Java should be faster than the same algorithm written in JRuby, right?.
就看你Java版写的怎么样了。 理论上也有可能对于某些算法,JRuby 编译器生成的字节码运行速度比 Java 编译器为功能等效的 Java 程序生成的字节码快。
但通常我希望手动优化的 Java 算法比手动优化的 JRuby 算法运行得更快,因为:
- Java 和 JRuby 字节码编译器的相对成熟度,
- 正在调整 JIT 编译器以优化 Java 程序的典型字节码,以及
- JVM 字节码架构更适合 Java。
虽然我不知道差异有多大。显然,这取决于进行手部优化的人员的技能。
However, if I write the algorithm in Java and then call it from JRuby, will I still get the performance advantages of java?
可能是,但有一些可能的原因可能不是这种情况:
- 您可能需要在调用边界处在等效的 Java 和 Ruby 类/类型之间进行转换,而转换的成本可能会抵消用 Java 重新编码的好处。
- 真正的性能瓶颈可能根本不在这个算法中。
在开始使用 Java 重新编写 JRuby 代码的练习之前,您应该进行一些测试,看看这是否值得进行;例如应用程序是否已经运行得足够快?然后您应该对应用程序进行概要分析以查看该应用程序是否真的将所有时间都花在了算法上。最后,您应该看看是否可以在 JRuby 中优化算法。 (例如,如果您可以用 O(N)
JRuby 算法替换 O(N**2)
JRuby 算法,那么这比用 Java 重新编码原始算法要好.)
关于jruby 中的 java 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3653774/