如何减少OpenJDK Java8虚拟机的启动时间?
我需要尝试通过调整VM/launcher参数来提高相对较大的无头java应用程序的启动时间(另外一项工作正在进行中,以实现调整实际代码的相同目标) 选择的虚拟机是标准的OpenJDK Java-8如何减少OpenJDK Java8虚拟机的启动时间?,java,optimization,app-startup,Java,Optimization,App Startup,我需要尝试通过调整VM/launcher参数来提高相对较大的无头java应用程序的启动时间(另外一项工作正在进行中,以实现调整实际代码的相同目标) 选择的虚拟机是标准的OpenJDK Java-8 openjdk version "1.8.0_102-internal" OpenJDK Runtime Environment (build 1.8.0_102-internal-b14, profile compact3) OpenJDK VM (build 25.102-b14, interpr
openjdk version "1.8.0_102-internal"
OpenJDK Runtime Environment (build 1.8.0_102-internal-b14, profile compact3)
OpenJDK VM (build 25.102-b14, interpreted mode)
主机是运行Linux的嵌入式ARM7(32位)
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 38.40
如前所述,目标是缩短启动时间;运行时性能是可以接受的
是否有人可以建议对虚拟机本身进行调整,以显著缩短交付周期
注意:我知道“-client”选项可能带来的好处,我会尽快试用它;有可能的缺点吗?还有别的吗
澄清:
“有趣的数字”是从目标通电到应用程序准备接受命令所需的时间
这由三部分组成:
- 系统启动时间:超出此问题的范围。唯一的影响是Java启动得很早,所以其他一些后台进程可能正在窃取计算能力;也许一些优先级扩展会有所帮助,但会牺牲一些其他流程
- JavaVM启动:这是这个问题的主要焦点
- 应用程序启动时间:这应该在优化中计算,但应用程序优化本身(例如,“未使用”类的延迟加载)不是这个问题的一部分。但是,应该记住这一点,因为任何缩短VM启动时间但延长应用程序启动时间的解决方案都不会有多大帮助
javac-profile 2
(甚至-profile 1
)当您使用指定配置文件之外的API时,将显示错误。jdeps-P
将显示您使用的每个API的配置文件。也许您可以避免使用更高配置文件中的API,从而将应用程序编译为更低配置的API。这将导致引导/系统类加载器加载的类更少,并且因此JVM启动更快。有关更多信息,请参阅
3.编译自己的JVM(免费、复杂)
广泛的知识(还讨论了紧凑型配置文件)
4.Java 9模块(免费但alpha阶段)
我不确定是否有成功的JVM 9到ARM的端口。仅取决于Java 8。然而,Eclipse的工作是这样的。看一看,也许您可以为您的应用程序获得一些动力
这将需要在代码库中创建模块,并仅使用应用程序使用的模块构建JRE。问题是JVM本身的启动时间,还是应用程序的启动时间(包括JVM启动时间)?@Michael:我编辑了这个问题以澄清问题。不幸的是,我没有更改VM的自由(和/或使用AOT)。我将调查您的选项2,这是目前我唯一可以使用的选项。我还将尝试使用选项1“评估”,如果收益可观,我将尝试将升级出售给我的上司(尽管我在那里的机会很少,而且这不是成本问题)。如果其中任何一个选项被证明是有用的,我将接受你的答案。@ZioByte“如果其中任何一个选项被证明是有用的,我将接受你的答案”。接受它吧……这是一个包含大量信息的好答案。