我从事JVM已有多年的经验,很少遇到JVM崩溃的情况,直到大约6个月前。
从那以后,我经历了大约2个JVM缺陷导致的5个JVM崩溃。Oracle的解决方案始终是相同的...升级。
每次升级始终是从一个点发布到另一个发布的……也就是说,Oracle的最新建议(在确认他们确实修复了该错误之后)是从1.6u20升级到1.6u26。
我应该如何关注JVM的次要版本?
这是否是需要进行大量回归测试的大事件,还是应该接受的安全升级?
我从事JVM已有多年的经验,很少遇到JVM崩溃的情况,直到大约6个月前。
从那以后,我经历了大约2个JVM缺陷导致的5个JVM崩溃。Oracle的解决方案始终是相同的...升级。
每次升级始终是从一个点发布到另一个发布的……也就是说,Oracle的最新建议(在确认他们确实修复了该错误之后)是从1.6u20升级到1.6u26。
我应该如何关注JVM的次要版本?
这是否是需要进行大量回归测试的大事件,还是应该接受的安全升级?
Answers:
它 不应该是一个升级版的未成年人的大事,我从来没有经历过的问题。
就是说,臭名昭著的Java 7问题有些令人恐惧,甚至很难解决,这是主要的版本升级,这些特定的问题实际上出现在Java 6〜u20中,也许已经在u25中得到了解决。它们之所以浮出水面,仅是因为Java 7默认启用了一些优化标志,而Java 6没有启用这些优化标志。如果您在Java 6中使用了这些标志,则可能会由于从6u19到6u20的微小升级(大约)而不仅崩溃,而且循环执行不正确,即计算错误。
事实是,没有人能保证升级版本能正常工作。JVM,它的环境(计算机,OS)和您的应用程序都相互交互,并且为了合理地确保一大堆东西很好地配合使用,您确实应该进行大量的回归测试。
我对JVM进行升级的方法与所有升级类似:除非我有特定的升级需求,并且除非它是关键的安全升级,否则我将等待一段时间并阅读其他人在Internet上的经验。如果一个月左右都没有人抱怨,那么升级就很安全。
以我在企业Java应用程序方面的经验来看,采用次要JVM更新的好处在于避免了相关的风险。
好处是次要更新 几乎总是包含错误修复程序。应用这些更新实际上可以提高生产环境的稳定性。我经历了JVM崩溃,其根本原因分析显示该缺陷已被识别,并已在较小的JVM更新中修复。
另一个好处是,次要更新通常会改善性能。但是,正如@Joonas指出的那样,在未经重大测试的情况下,在任何更新(主要或次要)中使用未经验证或实验性的性能标志都是冒险的。
与任何更改一样,最重要的是您要以负责任的方式进行。在计划JVM更新时,请遵循以下一些实践:
围绕Oracle Java 1.6 u20引入了针对“混合代码”的安全检查警报,这对某些用户的应用程序产生了影响,导致其崩溃。这是次要的升级,对生产产生了重大影响。
始终为回滚做准备。