[转帖]jdk与jre等的关系

https://zhuanlan.zhihu.com/p/45824326

这个跟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(定制你的Java/JavaFX Runtime)​zhuanlan.zhihu.com图标

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

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12613668.html