是否有某种方法可以获得合理的(不明显的)Java启动时间,从而使其适合编写命令行脚本(不是长期应用程序)?
要演示此问题,请在我的Macbook Pro上使用Java和JavaScript中的简单Hello World程序(运行w / node.js):
$ time java T
Hello world!
real 0m0.352s
user 0m0.301s
sys 0m0.053s
$ time node T.js
Hello world!
real 0m0.098s
user 0m0.079s
sys 0m0.013s
Java版本存在明显的滞后,而Node则不然。这使得命令行工具似乎没有响应。 (如果它们依赖于多个类,则尤其如此,与上面的简单T.java
不同。
答案 0 :(得分:3)
不太可能,您可能尝试的只是JVM的不同实现,但这可能不会改变。大多数Java应用程序(相对)长寿,并且可能是交互式的,这意味着JVM启动时间会因正常使用的噪音而丢失。
答案 1 :(得分:1)
你是否真的试过计时重复调用的Java命令行应用程序?我希望在启动时的第一个化身后,文件系统缓存中的库类可以稍微减轻这种情况。
那就是说,是的,Java平台不是最简单的平台之一,无论如何你都不会与一个小的原生可执行文件竞争。
编辑:正如你所说上面的时间是针对“预热”的电话,那么可能的解决办法可能是:
这不是很好,但它可以让你在Java中编写你的例程的gubbins(我假设它基本上是你想要的),同时仍然保持调用的命令行模型。
答案 2 :(得分:1)
正如其他人所说,简单的回答只是“不是真的”。您可以进行轻微的性能改进,但是您永远不会忘记虚拟机需要一段时间才能启动并开始运行。
确保您没有为此类应用选择服务器虚拟机 - 这样做真的会增加启动时间。
唯一真正的方法是将Java编译为本机代码,你可以使用GCJ - 所以如果你必须用Java编写这些应用程序而你必须让它们更快,那么可能是向下看的路线。请记住,虽然它不是最新的,但它的维护似乎也很快就会消失。
答案 3 :(得分:1)
尚未尝试过,但可能值得看看nailgun。它将在同一个JVM中运行您的Java程序,因此“预热”应该非常快。一个“你好世界”的例子从0.132s到0.004s