Java中的命令行工具连续运行多次,JRE保持打开/关闭,速度缓慢

Java中的命令行工具连续运行多次,JRE保持打开/关闭,速度缓慢,java,command-line,Java,Command Line,我用Java编写了一个命令行工具,它从一个BAT脚本中连续运行了很多次。现在它是一个可运行的JAR(事后看来,这可能不是这里的正确选择…)。每次运行程序时,JRE似乎都会被加载和卸载,这似乎效率低下。总的来说,它似乎比应该的慢了很多 有没有Java大师知道更合适的方法来处理这种情况?您可以尝试很多方法。一个简单的方法是使用-Xquickstart启动JVM 编辑:看起来此选项仅适用于IBM JDK(顺便说一句,它还支持AOT编译/共享类缓存) 另一种选择是,将其变成一个运行时间较长的进程,可以交

我用Java编写了一个命令行工具,它从一个BAT脚本中连续运行了很多次。现在它是一个可运行的JAR(事后看来,这可能不是这里的正确选择…)。每次运行程序时,JRE似乎都会被加载和卸载,这似乎效率低下。总的来说,它似乎比应该的慢了很多


有没有Java大师知道更合适的方法来处理这种情况?

您可以尝试很多方法。一个简单的方法是使用
-Xquickstart
启动JVM

编辑:看起来此选项仅适用于IBM JDK(顺便说一句,它还支持AOT编译/共享类缓存)

另一种选择是,将其变成一个运行时间较长的进程,可以交互或批量接受多个作业

有人创建了一个项目来创建一个框架,名为
nailgun
,不知道它处于什么状态。谷歌在我搜索时给了我这些结果:和


还有一个GNU的代码> GCJ,它将编译java到本机代码。

因为没有简单的修复,您也可以考虑更激进的方法:

  • 实际上,将bat中的内容移植到java本身中(如果使用某种过滤器对文件进行循环,则很容易)

  • 如果最大可移植性不是问题,则将jar编译成exe(例如使用GCJ)


  • 这实际上是Java最大的问题之一,没有任何简单的解决方案。基本上,如果您想要一个轻量级程序,它可能会连续快速运行很多次,那么您不应该使用Java

    我没有任何将Java编译成本机代码的经验,但我知道几乎没有人这样做;这可能有一个很好的理由


    如果你发布了BAT文件,或者至少描述了它的功能,也许有人可以提供更好的建议。

    你想用这个“jar”做什么?对不起,第一次完全看错了这个评论!它基本上是在特定文件格式(由另一个开发人员制作的自定义格式)的特定点上设置值。说来话长:我已经读过一些关于为什么Java的某些特性不能被编译成机器代码的论点,但坦率地说,我认为它们是错误的。我敢肯定,您可以将元数据嵌入机器代码并进行反射等。那么,为什么很少有人将Java编译成机器代码呢?我认为这是因为它只在少数情况下有用(比如这里的情况),而且编译器还没有其他编译器那么成熟。不幸的是。只是我的猜测。至于BAT文件,它与工作有关,所以我可能不应该发布它。另外,我更想知道是否有人知道一个框架来处理这个案例,所以我没有足够的动力来编写演示代码;)fd下面的回答也很好,换句话说,包括将程序作为服务运行。我确实找到了一些框架来将Java程序作为Windows服务运行,如果我不得不大量运行这个程序,这可能是最好的选择。