我在服务器上运行openjdk 11.0.3。每次服务器重启后(每晚都会),用户在首次启动我的应用程序时必须等待35秒才能开始使用。(在main方法中第一次System.out.println输出之前。)(但随后的启动非常快)
我尝试了以下选项来调试此问题:
以下是最重要的发现:
为什么在加载java.security.NoSuchAlgorithmException和jdk.internal.logger.DefaultLoggerFinder时会停顿23秒?而其他减速的时间呢?
编辑: 根据评论,我来澄清一些事情。 这是一个Windows远程桌面服务器。 实际上,不止一个服务器,但问题在所有服务器上都存在。 该应用程序是一个独立的应用程序。 因此,每天早上都会出现问题,因为尝试启动应用程序的用户会在“没有反应”时多次尝试启动它。 我现在已经尝试了多次重新启动其中一个服务器,以下是我的发现:
在重新启动后使用java11启动我的应用程序时,在第一个System.out.println之前需要平均40秒。然后,仅需要1-2秒钟,我的第一个JFrame就会显示出来。 在重启后使用java8(sun)启动我的应用程序需要平均16秒,直到第一个System.out.println。但是,我会在我的第一个JFrame显示之前等待25秒钟。 在先使用java8启动后再使用java11启动我的应用程序需要平均4-6秒钟。
-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远程桌面服务器。 实际上,不止一个服务器,但问题在所有服务器上都存在。 该应用程序是一个独立的应用程序。 因此,每天早上都会出现问题,因为尝试启动应用程序的用户会在“没有反应”时多次尝试启动它。 我现在已经尝试了多次重新启动其中一个服务器,以下是我的发现:
在重新启动后使用java11启动我的应用程序时,在第一个System.out.println之前需要平均40秒。然后,仅需要1-2秒钟,我的第一个JFrame就会显示出来。 在重启后使用java8(sun)启动我的应用程序需要平均16秒,直到第一个System.out.println。但是,我会在我的第一个JFrame显示之前等待25秒钟。 在先使用java8启动后再使用java11启动我的应用程序需要平均4-6秒钟。