我知道有 JRE 和 JVM。我也用 Java 编程过,所以不算是完全的初学者。但是最近我变得非常困惑,希望有人能及时回复我的问题。
我拥有哪个版本的 JRE 和 JVM,哪个是最新版本?
现在,在我感觉要告诉我“谷歌一下”之前,我已经谷歌过了。因此我感到困惑。
在里面Java 主页它说:
在 Java 控制面板的常规选项卡下,可通过“关于”部分查看版本。单击“关于”后,将出现一个对话框,其中显示 Java 版本。
好吧,我这样做了,并且我有版本 8 Update71。
该主页上还写道:
JRE 和 JDK 是分开的,可以在您的系统上共存。Mac 上只能安装一个 JRE。系统上可以安装多个 JDK,数量不限。
好吧,我已经知道了。所以我按照他们说的从终端获取版本,然后我得到了
java -version
java version "1.8.0_71"
Java(TM) SE Runtime Environment (build 1.8.0_71-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.71-b15, mixed mode)
好吧,看起来是一样的。那么问题来了:
我拥有哪个版本?我的意思是版本 8 是 JRE 版本?还是 JVM 版本?在主页上,虽然他们区分了它们(如引文所示),但获取版本的说明是相同!
更复杂的是,我去维基百科上面说目前支持的版本是 Java 8 和 Java 11。为什么是两个?9 和 10 又是怎么回事?再说一遍,这些是 JRE 还是 JVM?
谁可以给我解释一下这个?
答案1
在我看来,您的问题在同一篇维基百科文章中得到了回答:
目前支持 Java 8 和 Java 11长期支持(LTS) 版本,而 Java 10 是之前支持的快速发布版本。Java 10 的支持结束日期与 Java 11 的支持开始日期相同,即 2018 年 9 月。Java 7 不再公开支持,Java 9 已停止接收更新。由于 Java 9 是一个短期快速发布版本,已被 Java 10 取代,并且 Java 8 的“公开更新结束”计划于 2019 年 1 月(用于商业用途)结束,而非商业用途则不会早于 2020 年 12 月结束。对于 Java 11,Oracle 不会提供长期支持;相反,更广泛的 OpenJDK 社区(即 AdoptOpenJDK)将负责这项工作。
所以版本 9 和 10 是短暂的。我猜它们是为了应对严重的安全漏洞而仓促推出的权宜之计。
版本 8 是 Oracle 仍支持的最后一个版本,分为 JDK 和 JRE。版本 11 似乎已经放弃了这种划分,只拥有基于 OpenJDK 的统一 JDK 版本,因此它可能不具备 Oracle Java 付费版本的性能增强。
为了找到 Linux 上拥有的版本,我想您可以查询已安装的软件包。
在 Windows 上,您可以在以下位置的 32 位和 64 位注册表中找到该信息:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
您还可以在以下位置找到该信息控制面板 > Java(32 位)或者 控制面板 > Java(64 位):
答案2
您混淆了某些术语,并且您使用的是 Mac,而 Oracle 也混淆了其中的一些术语。
我认为有四种不同的事情。
JVM(Java 虚拟机)存在于 Java 的所有版本中,是运行 Java 编译类文件的可执行文件。它不可直接下载,但属于其他 3 个项目的一部分。java -version 显示您正在使用的版本。
JDK(Java 开发工具包)这是编写程序时所需的安装。它包括编译器和其他工具。对于安装了 Oracle 版本的 macOS,这是唯一提供可通过 /usr/bin/java 启动的环境的下载
JRE(Java 运行时环境)。在 Windows、Linux 和 Apple 版本的 Java 中,它提供了从命令行运行 Java 程序所需的最少文件选择。它似乎不存在于 Oracle macOs 版本中,但这是 Java 版本显示的 Java(TM) SE 运行时环境。
macOS 上的 JRE(Java 运行时环境)。来自 Oracle,这是在浏览器中运行 Java 小程序的环境。这是您在 Mac 上只能拥有一个的 JRE。这也是系统偏好设置中的 Java 控制面板可查看和更新的 JRE。
因此,在 macOS 上,您可以从命令行安装 JDK,其中包括 JRE 和 JVM,您可以拥有多个版本。还有一个单独的 JRE(与命令行不同),它在您的浏览器中运行小程序,并且位于 Java 控制面板中,您只能拥有其中的一个。
至于版本号等,据我所知,第 8 版之后版本号有所变化。维基百科说
2017 年 9 月,Java 平台首席架构师 Mark Reinhold 提议将发布序列改为“每六个月发布一个功能”,而不是目前的两年发布一次的时间表[1][2],随后该提议生效。
因此,9、10 号已被 11 号取代,12 号将于 2019 年 3 月到期 - 请参阅https://en.wikipedia.org/wiki/Java_version_history关于时间和支持情况。
要从命令行运行,找到可以使用的 JVM/usr/libexec/java_home -V
我明白了
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
Matching Java Virtual Machines (6):
11.0.1, x86_64: "OpenJDK 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
10.0.1, x86_64: "Java SE 10.0.1" /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_171, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
1.8.0_92, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
1.8.0_77, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home
安装并选择要安装的 JDK,请参阅https://stackoverflow.com/questions/52524112/how-do-i-install-java-11-on-mac-osx-allowing-version-switching