我们有一套Java应用程序,我们多年来一直在开发,通过Web Start远程启动。更新到Java SE 8 Update 91后,在启动过程中会有一个非常显着的暂停(20-60秒,具体取决于应用程序),而不会向典型用户表明发生任何事情。这种暂停发生在Java" Starting Application"对话框关闭,在应用程序启动之前。
暂停的长度似乎与应用程序的大小相关。恢复到Java 8 Update 77可以完全消除暂停,并且这些相同的应用程序可以立即启动。
我们的应用程序确实要求"所有权限"因为我们需要读取/写入客户端驱动器的数据以用于缓存目的。所以我们所有的罐子都经过签名并有必要的明显修改。
如果您的Java设置启用了Java控制台,那么控制台会立即显示在Java"启动应用程序"访问应用程序的JNLP文件时出现的对话框。但是,在暂停期间控制台中没有看到任何活动(例如,在暂停之后没有出现典型的Java类加载消息,并且在#34; main"方法中没有任何代码执行,直到暂停之后)。
其中一些应用程序相当大。我们编写的代码大约为10-12MB,额外资源总计在15-20MB之间,具体取决于应用程序。
我发现了一个听起来很相似的JDK错误报告...... bug report 此报告指出,如果在第一次启动之前删除Java缓存,则使用较旧的Java版本会导致即时启动。我报告的问题似乎没有受到Java缓存的影响。恢复到Java 8 Update 77会导致即时启动而不删除Java缓存。
Java 8 Update 91的Java发行说明提到了一个错误修复"修复了Applet启动时间的回归"。但我没有看到任何表明故意改变的事情会导致启动期间长时间停顿(例如增加安全扫描等)。
启动时暂停时间长,无法向用户表明发生了什么事情,我们会收到有关应用程序的投诉。
非常感谢任何帮助。
2016年7月1日更新...
我发现这个问题似乎描述了相同的症状:similar issue。但是,它与Java 7 Update 40有关。解决方法是禁用deployment.properties文件中的吊销检查。
我使用Java控制台设置"不检查"对于"执行签名代码证书撤销检查"和"在"上执行TLS证书撤销检查。我检查以确保更改反映在deployment.properties文件中。但是,这些设置根本不能解决或改善问题。
如果这有效,那将是一个很好的问题指标,但它不会是一个有用的解决方案"让客户在其高级设置中关闭这些撤销检查。对于能够访问我们的许多应用程序的公众来说,它尤其有用。
更新2016年7月7日......
根据jaivalis的评论,我下载了Java 8 Update 112 JRE的早期访问版本。当我用这个JRE运行我们的应用程序时,根本没有停顿。应用程序在" Starting Application"之后立即运行。对话框关闭。
到目前为止,我无法找到解释原因的说明。我希望这个"修复"并非新安全措施的结果尚未完全应用于此早期访问版本。我希望实际上已经解决了一些事情,并且当这个版本正式发布时,立即启动性能将保持不变。
顺便说一下,我找不到Java 8 Update 112的官方发布日期。我希望它会在7月份发生,但我看到了10月份的一些迹象。任何人都有关于何时可以获得此更新的任何信息?
以下是Java 8 Update 112 early access的早期访问页面 这是我发现的Java 8 Update 112 release timeline
的发布日期信息此page还提到了Java 8 Update 102,但我无法找到该更新的早期访问版本。我找到的任何链接都指向112更新。
答案 0 :(得分:1)
此问题已通过Java 8更新101版本(技术上构建1.8.0_101-b13)得到解决。
答案 1 :(得分:0)
您好我发现了一些可能对您有帮助的事情:)
在最近的Oracle补丁说明中,它表示这是Java最后一个补丁中的错误问题
我个人会找到第三方下载以前版本的java
这是补丁说明的链接 http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html
希望你找到问题!