如果您不';我不懂Java?

如果您不';我不懂Java?,java,ruby-on-rails,ruby,jruby,Java,Ruby On Rails,Ruby,Jruby,我听说过关于JRuby的很棒的东西,我知道你可以在不懂Java的情况下运行它。我的开发技能很强,Java不是我所知道的工具之一。它是一个庞大的工具,附带了无数的工具,如Maven/Ant/JUnit等 仅仅出于性能原因,是否值得将我当前的Rails应用程序迁移到JRuby?也许如果我同时学习一些基本的Java,会有一些不明显的额外好处,比如更好的调试/性能优化工具 我很想听听这方面的建议。最新版本比Ruby快得多,但占用的内存也大得多。如果这是您使用JRuby的唯一原因,那么除非您有需要解决的特

我听说过关于JRuby的很棒的东西,我知道你可以在不懂Java的情况下运行它。我的开发技能很强,Java不是我所知道的工具之一。它是一个庞大的工具,附带了无数的工具,如Maven/Ant/JUnit等

仅仅出于性能原因,是否值得将我当前的Rails应用程序迁移到JRuby?也许如果我同时学习一些基本的Java,会有一些不明显的额外好处,比如更好的调试/性能优化工具


我很想听听这方面的建议。

最新版本比Ruby快得多,但占用的内存也大得多。如果这是您使用JRuby的唯一原因,那么除非您有需要解决的特定性能需求,否则我不会打扰您,因为虽然它非常流行,但与标准Ruby相比,它的托管标准较低,使用它的人也较少。话虽如此,使用JRuby还有很多其他原因,比如需要与现有Java代码的互操作性,需要在Java得到运营部门“祝福”而Ruby没有得到的环境中部署。

我将稍微修改Peter所说的。与标准Ruby相比,JRuby可能会使用更多的内存,但这通常是因为您在一个进程中完成工作,而Ruby需要几个进程


您应该试试
Rails.threadsafe选项(例如,Trinidad gem带有
--threadsafe
选项)。我们已经听过几个故事,它可以提供出色的性能和较低的内存使用率,同时利用单个进程的多个CPU核。

JRuby是少数使用本机线程的实现之一。所以,如果你想做一些多线程处理,就去做吧

就托管而言,你必须将你的应用程序放在某种java容器中,我个人认为这远不如使用诸如passenger之类的东西(用于机架式应用程序)简单


当我们通过JMS进行通信时,我使用JRuby作为应用程序,它工作得很好,但如果我没有使用任何Java,我肯定会坚持使用CRuby。我最大的不满是,在测试中,使用JRuby运行测试需要花费很长时间,因为每次运行测试时都必须启动VM。这使得TDD变得更加困难,因为它会大大缩短您的测试时间。

如果您使用Windows,Jruby具有优势。它支持64位,并且您可以使用许多带有标准JDBC驱动程序的专有数据库。

我认为您已经基本掌握了这一点

JRuby只是另一个Ruby执行引擎,就像MRI、YARV、IronRuby、Rubinius、MacRuby、MagLev、SmallRuby、Ruby.NET、XRuby、RubyGollightly、tinyrb、HotRuby、BlueRuby、Red Sun和所有其他引擎一样

主要区别在于:

  • 可移植性:例如,YARV仅在x86 32位Linux上得到官方支持。OSX、Windows或64位Linux上不支持它。Rubinius只能在Unix上工作,不能在Windows上工作。JRuby OTOH无处不在:台式机、服务器、手机、应用程序引擎,随便你说。它运行在OracleJDK、OpenJDK、IBMJ9、Apple SoyLatte、RedhatIcedtea和OracleJrockit JVM(可能还有我忘记的几个其他JVM)以及Dalvik虚拟机上。它运行在Windows、Linux、OSX、Solaris、多个BSD、其他专有和开放Unices、OpenVMS和多个大型机OSs、Android和Google应用程序引擎上。事实上,在Windows上,JRuby通过的RubySpec测试比“Ruby”(意味着MRI或YARV)本身更多

  • 可扩展性:在JRuby上运行的Ruby程序可以使用任意Java库。通过JRubyFFI,他们还可以使用任意C库。有了JRuby1.6中新的C扩展支持,他们甚至可以使用MRI和YARV C扩展的一大个子集,比如Mongrel。(注意,“java”或“C”库实际上并不意味着用这些语言编写,它只指java或C++ API。它们可以用Scala或Culjule或C++或Haskell编写)。< /P>
  • 工具:每当有人为YARV或MRI(比如memprof)编写新工具时,JRuby在5年前就已经有了一个工具,它可以做同样的事情,只是更好。Java生态系统有一些“运行时行为理解”的最佳工具(这是我刚刚编造的一个术语,我指的不仅仅是简单的评测,我指的是用于深入理解程序在运行时到底做了什么、它的性能特征是什么、瓶颈在哪里、内存在哪里,以及最重要的是为什么会发生所有这些的工具)市场上提供的可视化,几乎所有这些都与JRuby一起工作,至少在某种程度上是这样

  • 部署:假设您的目标系统已经安装了JVM,部署JRuby应用程序(我不仅仅是指Rails,我还指桌面、移动和其他类型的服务器)实际上就是复制一个JAR(或WAR)和双击

  • 性能:JRuby有更高的启动开销。作为回报,您可以获得更高的吞吐量。在实践中,这意味着将Rails应用部署到JRuby是一个好主意,就像运行集成测试一样,但对于开发人员单元测试和脚本,MRI、YARV或Rubinius是更好的选择。请注意,许多Rails开发人员只是开发一个在MRI上进行单元测试,在JRuby上进行集成测试和部署。不需要为所有事情选择单一的执行引擎

  • 并发性:JRuby并发运行Ruby线程。这意味着两件事:如果锁定正确,程序将运行得更快;如果锁定不正确,程序将崩溃。(不幸的是,MRI、YARV和Rubinius都没有并发运行线程,所以仍然有一些坏掉的多线程Ruby代码不知道它坏了,因为很明显,只有在存在实际并发的情况下,并发错误才会出现。)

  • 平台(这是什么