如何减少OpenJDK Java8 VM的启动时间?

ZioByte:

我需要尝试改善一个相对较大的无头 Java应用程序调整VM /启动器参数的启动时间(正在进行单独的工作来实现调整实际代码的相同目标)。

选择的VM是标准的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, interpreted mode)

主机是运行Linux的嵌入式ARM7(32位)。

model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 38.40

如上所述,目标是缩短启动时间。运行时性能是可以接受的。

有人可以建议对VM本身进行调整以显着缩短交货时间。

注意:我知道“ -client”选项可能带来的好处,我将尽快对其进行试验。有没有可能的弊端?任何其他?

澄清:

“有趣的数字”是从目标启动到应用程序准备好接受命令所需的时间。

这由三部分组成:

  • 系统启动时间:不在此问题范围内。唯一的影响是Java的启动时间很早,因此其他一些后台进程可能会抢占计算能力。也许一些优先级调整可能会有所帮助,但会牺牲一些其他过程。
  • Java VM启动:这是此问题的主要重点。
  • 应用程序启动时间:这应该在优化中计算,但应用程序优化本身(例如:“未使用的类”的延迟加载)不是此问题的一部分,但是应牢记,因为任何解决方案都会缩短VM启动时间时间,但是延长应用程序启动时间不会有太大帮助。
diginoise:

1. AOT编译($$$)

根据您的实力,您可以尝试 支持ARM体系结构的 Excelsior JET 编译器。进行大量编译,并针对该平台进行了大幅精简和优化的可执行文件,从而极大地减少了JVM的启动时间。提供180天免费试用,因此足以评估该选项。

2.紧凑型材(免费)

Java SE 8 Embedded具有紧凑型配置文件您的JVM启动日志建议您的应用程序使用compact3(这是3中最大的)。

每个概要文件实质上是一组Java API(以及相关的类),并且compact3包含来自compact2的所有API 及其附加,而compact2包含来自compact1的所有API 及其附加。

从指定配置文件之外使用API​​时,运行javac -profile 2(甚至运行-profile 1)会显示错误。jdeps -P将显示您使用的每个API的个人资料。也许您可以避免使用较高配置文件中的API,从而将您的应用程序编译为较低配置文件API。这将导致引导程序/系统类加载器加载的类减少,从而加快JVM的启动速度。有关更多信息,请参见此处

3.编译自己的JVM(免费,复杂)

本演示文稿中的广泛知识(以及关于Compact Profiles的讨论

4. Java 9模块(免费但为alpha阶段)

我不确定是否存在将JVM 9成功移植到ARM的端口。Azul Systems的Zulu仅支持Java 8OpenJ9是Eclipse的努力,但是它的ARM端口似乎仍在试验中看一下,也许您可​​以为您的应用程序吸引一些注意力。

它将需要在代码库中创建模块,并且仅使用应用程序使用的模块来构建JRE。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章