我们有一组Java应用程序,已经开发多年,通过Web Start远程启动。在更新到Java SE 8 Update 91之后,启动过程会出现非常显著的暂停(根据应用程序不同而定,通常为20-60秒),对于典型用户来说没有任何提示。这种暂停发生在Java的“Starting Application”对话框关闭之后,应用程序启动之前。
暂停的长度似乎与应用程序的大小有关。回滚到Java 8 Update 77可以完全消除此暂停,并且这些相同的应用程序可以无暂停地启动。
我们的应用程序确实请求了“all-permissions”,因为我们需要读写客户端驱动器上的数据进行缓存。因此,我们所有的jar都被签名,并具有必要的清单修改。
如果您的Java设置启用了Java控制台,则在访问应用程序的JNLP文件时,Java的“Starting Application”对话框之后立即显示控制台。然而,在此暂停期间看不到控制台中的任何活动(例如,在暂停之前不会出现任何典型的Java类加载消息,直到暂停之后才会执行我们在“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日...
我发现了一个与此问题相同的SO问题:similar issue。然而,它与Java 7 Update 40有关。 解决方法是在deployment.properties文件中禁用吊销检查。
我已经使用Java控制台设置了“执行签名代码证书吊销检查”和“执行TLS证书吊销检查”的“不检查”。 并且我检查过确保更改反映在deployment.properties文件中。 然而,这些设置根本无法解决或改善问题。
如果这起作用,它将是问题的一个很好的指标,但让客户在其高级设置中关闭这些吊销检查并不是一个有用的“解决方法”。 对于能够访问我们多个应用程序的公众尤其没有帮助。 更新于2016年7月7日... 基于jaivalis的评论,我下载了Java 8 Update 112 JRE的早期版本。当我使用这个JRE运行我们的应用程序时,没有任何暂停。应用程序在“启动应用程序”对话框关闭后立即运行。
到目前为止,我找不到任何说明原因的注释。我希望这个“修复”不是由于新的安全措施而产生的,这些措施尚未完全应用于这个早期版本。我希望实际上已经解决了一些问题,并且当这个版本正式发布时,立即启动性能将得到保留。
顺便说一下,我找不到Java 8 Update 112的官方发布日期。我希望它会在7月份发布,但我看到一些迹象表明是在10月份。有人知道这个更新什么时候会普遍可用吗?
这里是Java 8 Update 112早期访问页面, 这里是我找到的发布日期信息 Java 8 Update 112发布时间表。
暂停的长度似乎与应用程序的大小有关。回滚到Java 8 Update 77可以完全消除此暂停,并且这些相同的应用程序可以无暂停地启动。
我们的应用程序确实请求了“all-permissions”,因为我们需要读写客户端驱动器上的数据进行缓存。因此,我们所有的jar都被签名,并具有必要的清单修改。
如果您的Java设置启用了Java控制台,则在访问应用程序的JNLP文件时,Java的“Starting Application”对话框之后立即显示控制台。然而,在此暂停期间看不到控制台中的任何活动(例如,在暂停之前不会出现任何典型的Java类加载消息,直到暂停之后才会执行我们在“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日...
我发现了一个与此问题相同的SO问题:similar issue。然而,它与Java 7 Update 40有关。 解决方法是在deployment.properties文件中禁用吊销检查。
我已经使用Java控制台设置了“执行签名代码证书吊销检查”和“执行TLS证书吊销检查”的“不检查”。 并且我检查过确保更改反映在deployment.properties文件中。 然而,这些设置根本无法解决或改善问题。
如果这起作用,它将是问题的一个很好的指标,但让客户在其高级设置中关闭这些吊销检查并不是一个有用的“解决方法”。 对于能够访问我们多个应用程序的公众尤其没有帮助。 更新于2016年7月7日... 基于jaivalis的评论,我下载了Java 8 Update 112 JRE的早期版本。当我使用这个JRE运行我们的应用程序时,没有任何暂停。应用程序在“启动应用程序”对话框关闭后立即运行。
到目前为止,我找不到任何说明原因的注释。我希望这个“修复”不是由于新的安全措施而产生的,这些措施尚未完全应用于这个早期版本。我希望实际上已经解决了一些问题,并且当这个版本正式发布时,立即启动性能将得到保留。
顺便说一下,我找不到Java 8 Update 112的官方发布日期。我希望它会在7月份发布,但我看到一些迹象表明是在10月份。有人知道这个更新什么时候会普遍可用吗?
这里是Java 8 Update 112早期访问页面, 这里是我找到的发布日期信息 Java 8 Update 112发布时间表。
这个页面也提到了Java 8 Update 102,但我找不到该更新的早期访问版本。我找到的所有链接都指向112更新。