我使用JRuby从Java运行一些Ruby脚本并收集结果。一切正常,但性能慢得令人无法接受 - 从终端执行script.rb
大约需要0.3秒,通过JRuby从Java执行它需要10秒钟。我使用的代码是:
ScriptingContainer jruby = new ScriptingContainer(LocalContextScope.THREADSAFE);
String script = readScript("script.rb");
Object receiver = jruby.runScriptlet(script); // takes ~10 seconds
Map<String, String> executionResult = (Map<String, String>) jruby.callMethod(receiver, ...);
瓶颈是runScriptlet()
方法,在通常高性能的Linux机器上花费8-10秒。我使用JRuby 9.1.6.0和Java 8(openjdk 1.8)。
我做错了什么 - 也许缺少一些必要的设置 - 或者这只是JRuby真的有多慢?还有其他人遇到过这个吗?