gpt4 book ai didi

java - OpenJdk 初始启动时间很慢

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:27 25 4
gpt4 key购买 nike

我在服务器上运行 openjdk 11.0.3。每当服务器重新启动时(每天晚上):对于我的应用程序的第一次初始启动,用户必须等待 35 秒才能启动应用程序。 (在第一个 System.out.println 是从 main 方法编写之前。)(但随后的启动速度非常快)我尝试了以下选项来调试它:

-Xlog:class+load:file=classload.txt

以下是最重要的发现:

... 
[2.284s][info][class,load] jdk.internal.loader.URLClassPath$FileLoader source: jrt:/java.base
[5.032s][info][class,load] sun.security.rsa.RSASignature$SHA1withRSA source: jrt:/java.base

[5.051s][info][class,load] java.util.LinkedList$Node source: jrt:/java.base
[8.121s][info][class,load] pos.LFChangeable source: file:/C:/Users/rho/AppData/Roaming/edapp/pos.jar

[8.135s][info][class,load] java.io.FileNotFoundException source: jrt:/java.base
[10.584s][info][class,load] sun.reflect.misc.ReflectUtil source: jrt:/java.base

[11.744s][info][class,load] java.security.NoSuchAlgorithmException source: jrt:/java.base
[34.853s][info][class,load] jdk.internal.logger.DefaultLoggerFinder source: jrt:/java.base

为什么在加载 java.security.NoSuchAlgorithmException 和 jdk.internal.logger.DefaultLoggerFinder 之间会挂起 23 秒?那么其他几秒钟的减速呢?

编辑:根据评论,我会澄清一些。这是一个 Windows rdp 服务器。其实不止一台服务器,但是所有服务器都存在这个问题。该应用程序是一个独立的应用程序。因此,每天早上都会出现问题,因为登录以启动该应用程序的用户会在“没有任何反应”时尝试多次启动它。我现在已经多次尝试重新启动其中一台服务器,这是我发现的:

在第一个 System.out.println 之前,重新启动后使用 java11 启动我的应用程序平均需要 40 秒。然后在我的第一个 JFrame 显示之前只有 1-2 秒。重新启动后使用 java8 (sun) 启动我的应用程序在第一个 System.out.println 之前平均需要 16 秒。但是在我的第一个 JFrame 显示之前我得到了 25 秒的延迟。在使用 java8 启动我的应用程序后,使用 java11 启动我的应用程序平均需要 4-6 秒。

最佳答案

您的应用程序可能缺少“类数据共享 (CDS) 存档”。这样的存档允许更快地加载标准类,并且已经由一些以前版本的安装程序默认生成,但 OpenJDK 11 没有安装程序。

这由 JEP 341 解决:

Currently, a JDK image includes a default class list, generated at build time, in the lib directory. Users who want to take advantage of CDS, even with just the default class list provided in the JDK, must run java -Xshare:dump as an extra step. This option is documented, but many users are unaware of it.

因此,虽然这个 JEP 是关于 JDK 12 自动执行必要步骤的,但它也提到了 JDK 11 的修复:只需在命令行上运行 java -Xshare:dump 一次,即可生成存档.

请注意,您可以通过在 CDS 中包含应用程序类来进一步缩短启动时间。另见 Class Data Sharing JDK 11 文档的一部分。

关于java - OpenJdk 初始启动时间很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55861874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com