Java 8更新151或152?

时间:2017-10-25 08:57:01

标签: java java-8

有两个Java 8 downloads on the Oracle page

release notes of 152注意到151上的两件事:

  • BigInteger性能改进
  • 编译器接受修改初始化方法之外的最终字段

后者似乎更像是一条注释"这是一个错误,但未在8中修复;它将在Java 9"中修复。所以这也适用于版本151,即使它没有被提及。

我对前者不确定。为什么这不是151?我发现这非常令人沮丧。两个版本没有明确指示哪一个是更好的"或者"首选"适用于大多数开发人员的版本。

因此我的问题是:在生产中使用152还是151更好?是否有我可以或应该使用的指标来决定?

4 个答案:

答案 0 :(得分:53)

一般的想法是

  • 8u151(标记jdk8u151-b12)是重要补丁更新(CPU)版本
  • 8u152(标记jdk8u152-b16)是一个补丁集更新(PSU)版本

来自官方Oracle CPU and PSU Releases Explained

  

从Java SE 7 Update 71(Java SE 7u71)的发布开始   2014年10月,Oracle将发布重要补丁更新(CPU)   与Java SE 7相应的补丁集更新(PSU)相同。

     

我应该选择哪个Java版本:CPU还是PSU? Oracle   强烈建议所有Java SE用户升级到最新的CPU   可用于发布系列的发行版。大多数用户应该选择   CPU发布。

     

用户只应使用相应的PSU版本   如上所述,受该版本中修复的其他错误之一的影响   在发行说明中。

     

随后的CPU版本将包含来自的所有修复程序   目前的PSU。出于这个原因,组织应该测试当前   PSU在他们的环境中预期包含这些修复   在下一个CPU中。

     

Java CPU和PSU版本之间有什么区别? Java SE   重要补丁更新(CPU)包含对安全漏洞的修复   和关键错误修复。 Oracle强烈建议所有Java SE   用户在可用时升级到最新的CPU版本。   Java SE CPU版本是奇数版本(即7u71,7u65 - 见   更多关于Java SE版本编号方案的内容。)

     

Java SE补丁集更新(PSU)包含的所有修复程序   相应的CPU,以及其他非关键修复程序。 Java PSU   只有在受到其中一个影响的情况下才能使用   该版本中修复了其他错误。发行说明呼唤了   Java SE PSU版本中提供的其他修补程序。

     

PSU版本为组织和开发人员提供访问权限   除了包含在关键修复程序中的非关键修复程序   相应的CPU。

同时阅读 What's the difference between odd and even Java updates?

要查找公开错误修复的完整列表,您需要打开发行说明底部的Bug修复页面。

因此,PSU(8u152)中有238个错误修复(不仅仅是BigInteger性能改进)。在下一个CPU版本中,您很可能无论如何都会获得大部分内容。因此,建议尽可能快地更新到8u151并测试/调整代码以便与8u152进行比较。如果你真的需要一些错误修正,你可以更新到8u152。

答案 1 :(得分:6)

每个Oracle下载页面

  

Java SE 8u151包含重要的错误修复。 Oracle强烈建议所有Java SE 8用户升级到此版本。 Java SE 8u152是一个补丁集更新,包括所有8u151以及其他功能(在发行说明中有描述)。

这对于实际目的来说意味着如果你依赖于为你的应用程序说jdk8u144,你可以升级到151并且不会有任何破坏。

但是如果您要升级并且不特别关心152中包含的增强功能,您可以继续。

如果您的应用程序依赖BigInteger,例如在某些财务应用程序中,这可能是一个大问题,可能需要进行一定程度的集成测试。

答案 2 :(得分:3)

我有两个理由喜欢8u151:

  1. 当我要求它检查更新时,Windows的桌面Java更新程序更新为8u151。我将其解释为“Oracle认为这是大多数人想要/应该拥有的版本”。

  2. BigInteger的性能改进似乎是151和152之间的唯一区别。如果这个改变经过充分测试并准备好进行生产,那么Oracle会将其改为151以避免混淆。他们没有。

答案 3 :(得分:3)

一般来说,我认为应该根据Oracle CPU and PSU Releases Explained页面(上面引用的)在CPU或PSU之间进行选择。

  • 如果您有关键Java应用程序 1 ,最初选择PSU上的CPU。 CPU升级破坏您的应用程序的风险较小。

    然后您应该计划很快升级到PSU 。原因是下一个CPU版本很可能包含此PSU中的增强功能。如果您在此升级周期中跳过PSU,则在下一个(强制)CPU之前,您将推迟查找/修复任何意外损坏。你无法预测这是否会导致问题。

  • 否则,如果您需要列出PSU的增强功能,请选择CPU上的PSU。

  • 如果上述情况都不适用,那么您所选择的并不重要。

请注意,如果您没有支持合同,这就是图片。如果您有支持合同,可能其他选项;例如支付Oracle为您提供自定义安全补丁,这些补丁可能会让您无限期地推迟安装增强功能。

另请注意,这是一个理想化的决策过程。在实践中,软件/ devops工程师通常必须在没有资源的情况下平衡竞争风险和时间表。

关于Oracle无法为您提供明确建议的主题......

  • 他们无法确定BigInteger性能升级是否会破坏您的代码。

  • 他们确实知道编译器修复可以改变某些人的行为' (破碎的)代码。但是没有简单的方法来识别破碎的代码先验

在这两种情况下,他们都不知道PSU的变化是否会影响。该信息在发行说明中供您自行决定。他们还没有为您提供明确的决策树......但考虑到变更的性质,最实用的方法是“尝试”#34;。

这也解释了为什么"地球上最知识渊博的人群 2 " 也无法给出明确的建议。没有确定的答案。

1 - 严重可能意味着安全至关重要,安全至关重要,对您的组织业务至关重要,对您的客户至关重要。商业。你的电话。

2 - 拉另一个:它已经响起了!