为什么如今的 JRE 最新版本是 8,而 JDK 已经是 13 了?

为什么如今的 JRE 最新版本是 8,而 JDK 已经是 13 了?

这个跟java 9提供的jigsaw有关

先说第一点,你应该避免使用oracle jdk而应该使用open jdk,去openjdk.java.net上下载,而不是java.com上下载

因为oracle jdk顾名思义,是oracle的版权产品,open jdk免费开源的真jdk

9之后的jdk,已经模块化了,模块化之后,就不再区分jvm,jre和jdk了

过去jvm是jre的子集,jre对比jvm多了rt.jar标准包的内容

而jre是jdk的子集,jdk对比jre多了javac等工具

那么9的jigsaw之后,所有这些,都被拆成了一个又一个jmod,模块

比如java.base.jmod,jdk.javac.jmod等

那用户可以根据自身需要,自由组合出自己的runtime,而这个runtime可能是jdk

也可能是jre+jdk的一部分,也可能是jre的一部分+jdk的一部分,或者干脆就只有jvm的一部分

而且用户可以添加第三方提供的native扩展,比如常见的两个扩展是javafx(gui)和graal(多语言)扩展,graal 19.3多语言扩展将会在2019的11月19日发布,到时候你可以利用该工具扩展出支持javascript,python,ruby,r等语言的运行时(runtime),javafx等下说

甚至java提供了jaotc可以将整个runtime精简,做成binary二进制机器码,就跟c等语言一样了

所以这个时候再提供jre就毫无意义了,因为这跟以前你拿一个jar出来,然后所有有jre的地方都能运行不一样了

如果你的jar依赖的jmod不在你自己做的runtime里面,那还是运行不了

所以就不再提供jre了,你需要的话,用jlink自己制作runtime

参考我的专栏文章:

这篇专栏文章中介绍了如何定制一个java的runtime的子集,同时添加了gui的扩展