我们有一个90MB的(Eclipse RCP)应用程序,带有139个自签名jar,在没有Web Start的情况下以8s开始,在旧版本的Java 7中以10s开始。我们将Java配置为不使用浏览器代理,即 deployment.proxy.type = 0
每次更新Oracle的Java启动性能都会下降。完全启动需要花费越来越多的时间:
我该怎么做才能解决这个问题?
从trace / logs中我可以看到,这种减速很可能完全是由于验证缓存的jar需要花费更多时间。请注意,this question类似,但未提供以下详细信息:
诊断:
验证缓存的jar XXX.jar
完成此操作后,将启动com.sun.javaws.Main,之后相同的验证似乎再次发生并花费大约相同的时间,然后应用程序启动。
我已经尝试但没有任何区别:
详情:7u60上的一些奇怪行为 在7u60中,应用程序在大约5秒后启动,之后Java控制台将在应用程序启动时在后台执行jar验证。但是.log文件报告在完成所有验证后应用程序启动。它将此报告为25秒,然后显示我的应用程序的第一个System.out,它实际上仅在5秒钟后发生。它还显示服务器的jar更新检查时间是服务器报告的10倍。所以我想这是日志框架滞后的问题! Haven没有在8u51上看过这个。
答案 0 :(得分:0)
本身不是答案(但是),但我发现启用跟踪时Java 8u25只生成一个跟踪文件。 8u51生成两个文件,一个来自用于更新应用程序的JVM,另一个用于运行它。这是新的(两个JVM初创公司),我认为与使用本机Windows沙箱功能的新设置有关。问题是它不应该在第二个JVM上再次验证签名。无论是否禁用使用本机沙箱的设置(默认设置),都会发生两个JVM实例的分离。
我报告了一个回归错误,如果我从Oracle那里得到答案,我会编辑答案。
注意:Java 8u31仍在一个JVM上运行所有内容,但启动时间与原始问题相同。