困惑于JRE、JDK和最新的Java版本

3

我目前在一台双启动的桌面电脑上,在Linux(Mint)系统中安装了Java JDK 8。

chris@M17A ~ $  sudo apt install default-jdk
...
default-jdk is already the newest version (2:1.8-56ubuntu2).
...
chris@M17A ~ $  java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

但我确信事实上1.8.0_171不是Java 8的最新版本!如果我想更改为1.11.xxx,这似乎是最新的LTS版本(至少对于Oracle非OpenJDK),我应该怎么做?我需要手动下载什么,还是使用PPA?我如何确保我的Linux操作系统正在使用版本11的JRE和版本11的JDK?
我也从未完全理解JRE方面的版本控制以及它如何与使用的JDK相对应。在我的Windows机器(W10)上,我正在使用Java 9 JDK但Java 8 JRE(我想)。这样做有问题吗? 这个问题称在Windows中没有Java 11 JRE,尽管有Java 11 JDK。在W10中这是个问题吗?使用JDK 11和JRE 8是个坏主意吗?
我也不理解为什么找不到关于“最新JRE”或“最新稳定的JRE”的信息。就我所知,它们似乎与最新的JDK没有一一对应,但我很难搞清楚所有这些。
我也有些困惑,不知道是选择OpenJDK还是另一个JDK(它们都是Oracle,所以我不知道如何称呼非OpenJDK的那个...“商业JDK”?)。但与上述困难不同,这里有很多解释。我主要寻找“最新稳定版本”,希望具有LTS。看起来“商业JDK”版本11可能是正确的选择...

1
JDK是JRE的超集,它们的版本匹配。然而,据我所知,Oracle最近停止提供仅限JRE的发行版。使用较新版本的Java编译的代码无法在旧版本的Java中执行。 - Slaw
好的,谢谢。所以你的意思是说,使用Java 9 SDK编译的任何字节码都必须由JRE >= 9执行?我有点难以相信。语言中引入的新功能(例如lambda)可以编译为早期版本的JVM中合法的字节码,不是吗?否则人们就不得不一直更新运行JRE 8的所有操作系统到9/10/11,或者开发人员会不愿意发布使用11编写的应用程序...!我发现我的设备几乎从不抱怨非可执行字节码。 - mike rodent
1
这与增加/删除功能无关(直接)。类文件具有版本标志,并且JVM拒绝执行由较新版本的Java编译的代码,抛出“UnsupportedClassVersionError”。 Java仅努力实现向后兼容性(这意味着Java _N_编译的代码可以在Java> = _N_上运行)。 也就是说,有交叉编译 - Slaw
值得注意的是,随着Java Applets和Java Web Start的消失,我所知道的最新版本的Java(如OpenJDK 11、12或13)中已经没有JRE了。如果您需要为正在构建的桌面应用程序(如Swing或JavaFX)提供Java运行时,则必须使用新提供的工具在应用程序中捆绑JVM。Oracle和Java社区不再期望最终用户有意识地安装Java,因此不需要JRE。 - Basil Bourque
正如我所说,JDK和JRE之间的版本是匹配的。因此,无论是否实际上存在仅限于JRE的分发版,JDK N 都对应于JRE _N_。从JVMS的§4.1中可以看到,"符合Java SE N的Java虚拟机实现必须支持在表4.1-A中为Java SE N指定的类文件格式的主要版本". 因此,不支持针对JDK 11的代码的JRE 8。 - Slaw
显示剩余4条评论
1个回答

3

Java 8是您系统的默认JDK(推荐使用)。

根据链接,您需要使用以下命令添加openjdk存储库:

sudo add-apt-repository ppa:openjdk-r/ppa

然后,您需要使用以下方式更新您的索引:

sudo apt-get update

如果你想安装JDK 11,可以执行以下操作:

sudo apt-get install openjdk-11-jdk

[提示]

default-jdk 是默认的 jdk。这意味着,如果这是最新的版本,则您拥有 jdk 的建议/默认版本。

此外,在 Linux 上推荐使用 openjdk。


谢谢。请看更新...你能否更明确地告诉我该做什么?当你说JDK 8是默认版本时,我想你是对的,但最新版本似乎比1.8.0_171高:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html:_221。这是否只是因为apt存档(或称之为其他名称)略有过时? - mike rodent
@mikerodent,openjdk-11-jdk 不在仓库中(请参见我的编辑) - dan1st
再次感谢。我又尝试了一遍(请见上面的更新):仍然出现同样的错误。也许我应该坚持使用默认版本。虽然这很奇怪:v8是在2014年发布的,v9是在2017年发布的,v11则是一年前发布的。 - mike rodent
@mikerodent 我错了,你需要执行 sudo apt-get update - dan1st

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