加快java启动速度

加快java启动速度,java,Java,是否有某种方法可以使Java获得合理(不明显)的启动时间,从而使其适合编写命令行脚本(而不是长寿命的应用程序) 关于这个问题的演示,请在我的Macbook Pro上使用Java和JavaScript(运行w/node.js)编写一个简单的Hello World程序: $ time java T Hello world! real 0m0.352s user 0m0.301s sys 0m0.053s $ time node T.js Hello world! real

是否有某种方法可以使Java获得合理(不明显)的启动时间,从而使其适合编写命令行脚本(而不是长寿命的应用程序)


关于这个问题的演示,请在我的Macbook Pro上使用Java和JavaScript(运行w/node.js)编写一个简单的Hello World程序:

$ 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
不同,如果它们依赖于多个类,这一点尤其正确。

不太可能,您可能只能尝试不同的JVM实现,但这可能不会改变。大多数java应用程序(相对而言)尽管存在很长时间,而且可能是交互式的,这意味着JVM的启动时间会在正常使用的噪音中丢失。

但是,您是否确实尝试过重复调用Java命令行应用程序?我希望在第一次实现后,由于文件系统ca中的库类,启动时间会有所减少切

也就是说,是的,Java平台不是最简单的平台之一,在任何情况下,您都不会与小型本机可执行文件竞争

编辑:正如您所说,上面的时间安排是针对“热身”通话的,那么可能的解决方法是:

  • 用Java编写命令的gubbins
  • 编写一个简单的持续运行的本地“服务器”,它接收命令并将它们传递给相关的Java例程
  • 编写一个简单的本机命令行包装器(或者编写在启动速度快的东西中),其唯一存在的理由是将命令传递到Java服务器并输出结果

这不太好,但它可以让您用Java编写例程的gubbins(我认为这基本上就是您想要的),同时仍然保留调用的命令行模型。

正如其他人所说,简单的答案是“不太可能”。您可能会对性能进行一些小的改进,但您永远无法摆脱虚拟机需要一段时间才能启动和运行的事实

确保你没有为这样的应用选择服务器虚拟机-这是一件真正会增加启动时间的事情


唯一切实可行的方法是将Java编译成本机代码,这可以通过GCJ实现。因此,如果你必须用Java编写这些应用程序,并且必须更快地使用它们,那么这可能是一个值得轻视的途径。请记住,虽然它不是最新的,而且对它的维护似乎也在逐渐消失。

还没有尝试过,但可能值得一试它将在同一个JVM中运行您的Java程序,因此“预热”后应该非常快。“hello world”示例从0.132s到0.004s


Java在虚拟机中运行。JavaScript直接从代码中执行。尝试对较大的程序(较小的开销)或仅对执行时间(无虚拟机延迟)计时。您可能想了解Java快速入门:Java不适合编写命令行脚本。还有许多其他语言更适合它。请使用适当的工具来完成此工作。@GuillaumePolet试图主要为OSX/Unix编写代码,但谢谢。@skaffman不幸的是,有许多库的最佳接口是Java,例如ANTLR(我知道有C-target选项,但它与代码不同步,是一种Java-in-C风格的代码。)是的,我知道第一次运行通常需要3.5秒左右,然后是上面显示的为后续运行打招呼的计时。啊,好的。现在我再看看你的计时,三分之一秒实际上对Java初创公司来说并不坏。如果你真的需要更快的速度,那么我修改了我的答案,建议一个笨拙的解决方法。FWIW我找到了Java startup在Linux 1.7 JVM上比在Mac 1.6JVM上快得多。