jruby 中的 java 性能

标签 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 类的迭代函数是否会在纯 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/

相关文章:

java - JRuby 到 jar 可执行文件

java - 如何从 Java 调用/使用 MRI Ruby?

java - I/O 概念刷新与同步

java - 如何迭代Nested Map和Multiset? - java / Guava

java - 在JAVA中 Controller 之间发送数据?

java - 在 JRuby 中使用的 Java 对象上使用(自定义)getId 方法有什么问题吗?

javascript - 如何在 Chrome 开发工具中显示自己的事件

php - 按州组织自定义 WordPress 帖子的更有效方法

java - 真实示例Java中什么是延迟驱动或性能驱动的应用程序

java - 有关检查样式的提示