草庐IT

java - 如果您不了解任何 Java,那么运行 JRuby 是否有优势?

coder 2023-05-18 原文

我听说过有关 JRuby 的好消息,而且我知道您可以在不了解任何 Java 的情况下运行它。我的开发技能很强,Java 不是我所知道的工具之一。它是一个庞大的工具,附带大量的工具,例如 Maven/Ant/JUnit 等。

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

希望得到一些关于这个的建议。

最佳答案

我认为你已经成功了。

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

主要区别在于:

  • 可移植性:例如,YARV 仅在 x86 32 位 Linux 上得到官方支持。 OSX 或 Windows 或 64 位 Linux 不支持它。 Rubinius 仅适用于 Unix,不适用于 Windows。 JRuby OTOH无处不在:桌面、服务器、手机、App Engine,应有尽有。它运行在 Oracle JDK、OpenJDK、IBM J9、Apple SoyLatte、RedHat IcedTea 和 Oracle JRockit JVM(可能还有几个我忘了)以及 Dalvik VM 上。它可以在 Windows、Linux、OSX、Solaris、几个 BSD、其他专有和开放的 Unices、OpenVMS 和几个大型机操作系统、Android 和 Google App Engine 上运行。事实上,在 Windows 上,JRuby 通过的 RubySpec 测试比“Ruby”(即 MRI 或 YARV)本身还多!

  • 可扩展性:在 JRuby 上运行的 Ruby 程序可以使用任意 Java 库。通过 JRuby-FFI,他们还可以使用任意 C 库。借助 JRuby 1.6 中新的 C 扩展支持,他们甚至可以使用 MRI 和 YARV C 扩展的一大子集,例如 Mongrel。 (请注意,“Java”或“C”库实际上并不意味着用这些语言编写,它仅表示使用 Java 或 C API。它们可以用 Scala、Clojure、C++ 或 Haskell 编写。)

  • 工具:每当有人为 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 代码不知道它已经损坏,因为显然只有在实际并发时才会出现并发错误。)

  • 平台(这在某种程度上与可移植性有关):那里有一些令人惊叹的 Java 平台,例如Azul JCA 具有 768 GiBytes 的 RAM 和 864 个 CPU 内核,专为内存安全、指针安全、垃圾收集、面向对象的语言而设计。安卓。谷歌应用引擎。所有这些都运行 JRuby。

关于java - 如果您不了解任何 Java,那么运行 JRuby 是否有优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927615/

有关java - 如果您不了解任何 Java,那么运行 JRuby 是否有优势?的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  3. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  4. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  8. ruby - 使 faSTLane 不那么冗长 - 2

    有没有办法配置(例如,可以使用Fastfile)或以更简洁的方式执行FaSTLane?它目前打印出很多信息,这些信息通常会使开发人员对警告和错误视而不见。主要问题是需要花费一些时间在大量无用消息中滚动和搜索黄色/红色文本,直到您了解发生了什么。默认设置会打印所有内容,令人惊讶的是甚至还有--verbosemode对于CLI,但我找不到任何相反的东西,例如--quiet模式。编辑:下面是一些我希望能够抑制的输出示例。考虑到我使用了来自gitrepo的Fastfile,gym、match、cocoapods、get_version_number、increment_version_numb

  9. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  10. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

随机推荐