Java版本和术语,1.6 vs 6.0 OpenJDK vs Sun

55

我对Java版本号的理解有些困难。我看到很多版本,比如1.4.2、1.5和1.6,但我也遇到过5.0和6.0。我不太理解这种版本控制或者版本更新进度。

我对Java相当新手,读了一点关于OpenJDK和Sun的介绍,我认为我懂了。这些版本是OpenJDK和Sun之间的差异吗?例如,OpenJDK的最新版本是1.6,Sun的是6.0?

所有这些版本对于一个刚接触Java的人来说都很令人困惑。


1
基本上,Java从1.0到1.1,再到1.2等版本。然后Sun决定改变命名规则为5、6而不是1.5、1.6,但这种新规则从未真正被采用,即使java -version报告的版本也没有遵循这种新规则。 - Yishai
相关 https://bugs.openjdk.java.net/browse/JDK-8061493 - Braiam
6个回答

50
版本控制简直是一团糟:
  • Java 1.0 和 1.1 是正常的
  • 然后 Java 1.2 出现了,但你应该称其为 "Java 2, JDK 1.2"
  • 这一直持续到 1.4(还有像 1.4.2 这样的小版本发布)
  • 接下来的版本据说是 "Java 5.0",但在文件名和 URL 中仍然到处都是 "1.5"。
  • 从 Java 6 开始,他们放弃了小版本,并且大部分(但不完全,参见 java -version 的输出)消除了旧版本控制方案的痕迹,但人们已经习惯了它并继续在口语中使用它。
  • 从 Java 9 或 10 开始,java -version 的输出中也消失了 1.X 表示法(导致依赖于解析它的代码出现问题),人们几乎停止使用它。我们现在有 Java 15、Java 16、Java 17 等。

还要注意的是,在提问时,Sun JDK 和 OpenJDK 是单独的代码库(有很大的重叠),而 Sun JDK 是官方参考实现。

在此之后的十多年里,Java被出售给了Oracle,OpenJDK成为官方的Java参考实现,并且Oracle停止维护Oracle JDK作为单独的代码库。相反,他们只提供OpenJDK构建,并为其提供商业长期支持,包括错误修复和安全补丁。但是您也可以从AdoptOpenJDK(最近更名为"Adoptium")免费获取构建版本,只是不会获得如此长时间的支持。

小版本也不太清楚。有时候你会看到构建x或更新y。我猜构建==更新? - Ryan
OpenJDK中的JDK 17是什么? - Ilia Sidorenko
@IliaSidorenko 注意,这个答案已经超过10年了。我已经添加了当前情况的条目。 - Michael Borgwardt
@SirajAlam,我认为四处收集针对编程语言的过时怨恨并不健康。 - Michael Borgwardt
放松点,Mike,我只是开玩笑。 - Siraj Alam
显示剩余2条评论

21

这个(咳咳)在Java SE 命名和版本中解释:

当前版本是Java平台标准版6(Java SE 6)。上一个版本是Java 2平台标准版5.0(J2SE 5.0)。

Sun Microsystems于2006年简化了平台名称,以更好地反映构建在Java平台中的成熟度、稳定性、可扩展性和安全性的水平。Sun从名称中删除了“2”并删除了“点数”(句号后面的数字)。 Java平台的任何更新都将仅注明为更新,而不是在平台名称的末尾添加“点数”。

由于在Java开发人员社区内具有显着的流行度,开发工具包已经恢复到了名称“JDK”,而不是“Java 2 SDK”(或“J2SDK”)。运行时环境已经恢复到了“JRE”,而不是“J2RE”。(请注意,“JDK”代表版本5.0中的“J2SE Development Kit”)。

有关平台名称和版本号的更多信息,请参见以下页面:

引用自 Java SE 6 Platform Name and Version Numbers:

在此版本中,平台名称已从J2SETM更改为JavaTM SE。官方名称是JavaTM Platform, Standard Edition 6。

两个版本号(1.6.0和6)都用于标识此版本的Java平台。版本6是产品版本,而1.6.0是开发人员版本。使用数字6反映了Java SE的成熟度、稳定性、可扩展性和安全性正在不断提高。

并且来自J2SE版本1.5.0或5.0?

两个版本号“1.5.0”和“5.0”都用于标识Java 2平台标准版的此版本。版本“5.0”是产品版本,而“1.5.0”是开发人员版本。数字“5.0”用于更好地反映J2SE的成熟度、稳定性、可扩展性和安全性。

去掉“1.”后得到数字“5.0”。原本的1.5.0现在是5.0(1.5变成了5)。

综上所述,整个命名混乱不堪,但这 终于结束了,当前的平台名称是JavaTM平台,标准版 6(简称JavaTM SE 6)。该平台下提供了两个产品:JDKTM 6和JRETM 6。

OpenJDK 6是Java SE 6平台的开源实现,与Sun的JDK不同。


1
我认为我们现在可以追溯地清晰明确地称Java 1,Java 2,Java 3,Java 4和Java 5,分别是java.version 1.0.x/1.1.x、1.2.x、1.3.x、1.4.x和1.5.0。 - Lawrence Dol
是的,他们在J2SE中移除了这个疯狂的2,所以这种疯狂终于结束了。 - Pascal Thivent
@Michael Borgwardt,由于Solaris更加混乱,问题是Oracle会引入什么呢;-) - stacker
需要注意的是,由Red Hat、Fedora等提供的OpenJDK版本已通过Java TCK认证,被认为是有效/正确的运行时,而其他大多数(全部?)开源JDK实现则没有。 - Ophidian

7
  • Java 1.5.x 相当于 Java 5.x
  • Java 1.6.x 相当于 Java 6.x

基本上忽略版本号中的 "1." 部分。


那么在版本控制方面,OpenJDK和Sun之间没有区别吗? - brad
1
我非常确定从来没有叫做Java 4的东西。从5开始,全版本号的转移就开始了。 - Michael Borgwardt
@brad,Glen只是回答版本号问题。Openjdk和Sun的JVM是两个独立的JVM实现。 - matt b
不同的JVM实现是否必须遵循某些规范来使用特定版本? - brad
有一个区别:版本6是产品版本,而1.6.0是开发者版本。 - Pascal Thivent

2

谢谢你提供的链接,我一直在搜索,但没找到完全符合的! - brad

1

唯一的区别是单个数字通常与Java SE 5和Java EE 6一起使用。

Java编译器使用的版本为1.5和1.6,可以通过java -version命令查看,有时候“次要版本”也被用作版本字符串,就像SunOS 5.8被称为Solaris 8一样。


1

Java版本指南是任何新手理解Java版本控制的最佳博客。

自2019年以来,Java每6个月发布一个新版本,即3月和9月。

现在是2021年10月,Java 17已经发布。这是下载OpenJDK的链接。

几个值得注意的要点:

  1. 您可以始终使用最新版本的Java,它将执行使用先前版本编写的代码
  2. 以前JRE和JDK是分开分发的,现在有一种趋势只分发JDK
  3. 有两个发行版:OpenJDK(免费)和OracleJDK(付费)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接