码农飞升记-02-OracleJDK是什么?OracleJDK的版本怎么选择?

HeavenZhi 2021-05-04 14:11:01
是什么 飞升 02-oraclejdk oraclejdk



上一篇 Java 是什么? 中我们了解了 Java 的概念,以及什么是 JDK 和 JDK 与 JRE 有什么关系,这次我们来了解一下 OracleJDK。

1.Oracle JDK 是什么?

我们知道,JDK 是 Java Development Kit 的缩写,翻译过来就是 Java 开发工具包。

Oracle JDK 源自 Sun JDK(2009年 Oracle 收购 Sun),Oracle JDK 自然就是 Oracle 公司出品的 JDK。所以 Oracle JDK 就是 Oracle 公司开发维护的 Java 开发工具包。
但是只是这样理解未免太片面了一点。

根据 Java Platform Group 产品管理高级总监 Donald Smith 在" Oracle JDK Releases for Java 11 and Later "中的描述:

01(Oracle JDK Releases for Java 11 and Later)

因为本人英语烂到了令人发指的地步,为了避免浪费时间和不必要的翻译错误,这里就简单引用谷歌翻译的结果方便粗略理解:

理想情况下,我们会根据您的情况将所有 Oracle JDK builds 简单地称为 GPL 或商业许可下的 "Oracle JDK",但是,由于历史原因,尽管存在很小的差异,但我们将在 Oracle's OpenJDK builds 和 Oracle JDK 中分别引用它们。

根据以上内容,我们可以知道 Oracle JDK builds 实际上包括了一个开源版本的 Oracle's OpenJDK builds(基于 GPL 开源)和商业版本的 Oracle JDK builds,但是因为其本身写法繁琐和对开发没有多大作用,外界一般把他们粗略称为 Open JDK 和 Oracle JDK。(胡乱简写害死人系列,这是下一章的一个坑)

所以由此可知,Oracle JDK 实际上有几种含义:
1.由 Oracle 公司推出的商业 JDK (最常用)
2.由 Oracle 公司推出的 JDK (Oracle JDK builds下所有的 JDK)
3.Oracle JDK builds

在大部分情况下的 Oracle JDK 指的是 Oracle 公司推出的商业版 JDK

2.Oracle JDK 版本如何选择?

说到 Oracle JDK 该怎么选择 ,这就不得不提到 Oracle JDK 发布的众多版本了。

要是有兴趣可以去 Java发展历程 看看 Oracle JDK 到底有哪些版本。

截止目前:2021年5月4日,Oracle JDK一共有17个大版本。在众多版本中如何选择适合的版本进行使用,就成了一个比较头痛的问题。要想知道究竟哪个版本适合自己,就必须得先了解一下 Java SE 的发布节奏以及每个版本间的差距。

1.Java SE 发布节奏以及不同版本的差距

1.Java SE 8 以及之前版本的发布节奏和不同版本的差距

根据 Java CPU and PSU Releases Explained里面的描述:

02(Java CPU and PSU Releases Explained)

1.发布的版本区别

CPU (Critical Patch Updates):关键补丁更新(CPU)包含对安全漏洞和关键错误的修复。Oracle 强烈建议所有 Java SE 用户升级到最新的 CPU 版本。Java SE CPU 版本是奇数版本(即7u71、7u65–请参阅此处有关Java SE版本编号方案的更多信息)。

PSU (Patch Set Updates):补丁集更新(PSU)包含相应 CPU 中的所有修复,以及其他非关键修复。只有当您受到该版本中修复的其他错误之一的影响时,才应使用Java PSU版本。Java SE PSU 版本是偶数版本版本说明中列出了Java SE PSU 发行版中提供的其他修复程序。

PS:
Oracle 强烈建议所有 Java SE 用户升级到一个版本系列的最新 CPU 版本。大多数用户应该选择 CPU 版本。

如果用户受到版本说明中所述的该版本中修复的其他错误之一的影响,则只能使用相应的 PSU 版本。

随后的 CPU 版本将包含当前 PSU 的所有修复程序。因此,组织应在其环境中测试当前 PSU ,以预期这些修复将包含在下一个 CPU 中。

从2014年10月开始,随着 Java SE 7u71(CPU)和 Java SE 7u72(PSU)的发布,Oracle 计划在 Java SE 7的每个 CPU 发布版本的同时,额外发布一个相应的 PSU 版本

2.发布周期

Java 每两年发布一次,直到 Java 6于2006年12月23日在 Sun 下发布为止。由于政治上的僵局,下一个版本是2011年7月28日发布的 Java 7。

在2012年3月7日于伦敦举行的 QCon 2012 大会上,前Sun Microsystems负责人、现任Oracle Java产品经理 Simon Ritter 承诺 Java 将回到两年的发布周期

但在2013年4月18日时,Oracle 公司 Java Platform Group 首席架构师 Mark Reinhold 在博客中表示:Oracle 计划将 Java 8 的计划发布推迟到明年,理由是为了修复 Java 的安全漏洞

3.版本的关系

版本内的更新:例如:Java 8 > Java 8u20 > Java 8u40,大多是对一些安全漏洞的修复和小型功能更新,版本间差距较小(除安全漏洞外)。

版本间的更新:例如:Java 6 > Java 7> Java 8,有较大修改、更新和安全漏洞修复,和传统版本一样,每一个数字的变动都是一次巨大的改革,版本间差距巨大。

2.Java SE 9 以及之后版本的发布节奏和不同版本的差距

根据 Java Platform Group 产品管理高级总监 Donald Smith 在" Update and FAQ on the Java SE Release Cadence "中的描述以及 Oracle Java SE Support Roadmap 的描述,提炼出我们需要的部分:从 Java SE 9 开始 Java 开启了一个新的版本控制和发布节奏模型。

03(Oracle Java SE Support Roadmap)

1.发布的版本区别

LTS版本(Long Term Support,长期支持版本),提供至少八年的商业支持(根据市场需要有可能会延长),到期后会被新的 LTS 版本取代。

non-LTS版本(non Long Term Support,非长期支持版本),提供六个月的商业支持,到期后会被新发布的版本取代。

2.发布周期

整体发布周期为每六个月发布一版,其中:

LTS版本:每三年发布一版

non-LTS版本:每六个月发布一版

PS:
当二者发布时间冲突时,优先发布LTS版本,non-LTS版本向后推迟一个周期。

3.版本的关系

版本内的更新:例如:Java 11 > Java 11.0.1 > Java 11.0.2,大多是对一些安全漏洞的修复,版本间差距几乎没有(除安全漏洞外)。

版本间的更新:例如:Java 9 > Java 10 >Java 11更接近于从 Java 8 > 8u20 > 8u40,每六个月发布一次的 non-LTS 版本更像"主要版本"的"功能发布",LTS版本更像是主要版本,而non-LTS版本更像是包含上一个LTS版本的测试版本,版本间差距较大。

2.Oracle JDK收费吗?

知道了Java SE 发布节奏以及不同版本的差距之后,最能影响人们做出选择的应该就是价格问题了。
没错了,Oracle JDK 也是要收费的,不过并不是所有版本都收费,也不是所有用途都收费。

04(Oracle Java Archive)

从 Java 的历史版本中我们可以看到一个有趣的现象,Java SE 8 这个标题出现了两次,分别是Java SE 8u202和之前版本和Java SE 8u211和之后的版本。

为什么会出现这个现象呢?

Java SE 8u201(CPU)/8u202(PSU)以及之前的版本使用的是 Binary Code License
Java SE 8u211(CPU)/8u212(PSU)以及之后的版本使用的是 Java SE OTN License

因为这两个许可证有着巨大的区别,所以硬生生的把 Java SE 8 硬生生分成了两个部分,根据这两个许可证长篇累牍的描述结合 RednaxelaFXOracle 终于要向 Java 的非付费用户开枪了-怎么看?
采用java开发商业软件需要给Oracle付钱吗?两个问题的回答提炼出了几个要点。

许可证 免费学习 免费个人使用 免费开发 免费测试 免费商业功能 免费商业使用 免费在台式机/笔记本上使用 免费在服务器上使用 免费嵌入式设备和其他计算环境上使用 免费安全更新
Binary Code License * *
Java SE OTN License - * * * *

PS:
商业功能指的是 Oracle JDK 自带的 HotSpot VM 的启动参数中是否有-XX:+UnlockCommercialFeatures,如果有-XX:+UnlockCommercialFeatures就代表启动了商业功能,这个功能默认是关闭状态,需要手动开启(在Java 11中被废除)。

Java Flight Recorder(JFR) 已经加入Open JDK 11,在Open JDK 11/bin下可以直接启动,或者在HotSpot VM 的启动参数中加上-XX:StartFlightRecording。

采用 Binary Code License 的 Java 8u201/8u202及其之前的版本,个人使用和商用几乎都是免费的(不使用商业功能和嵌入式设备的情况下)。

采用 Java SE OTN License 的 Java 8u211/8u212及其之后的版本,个人使用免费,商用就要购买许可证才可以(虽然可以偷偷商用,不过那种操作就跟裸奔过雷区一样,你也不知道啥时候会灰飞烟灭,也不知道 Oracle 会不会等养肥了再宰)。

3.总结

洋洋洒洒地写了那么多,写的我都快从 Java 入门到提桶跑路了(其实是知识储备不够,一边写一边查),颇有一种重学Java的感觉。就不多说了,开始总结:

在 JDK 的选择上其实还有一个大类,那就是 Open JDK builds,不过那是下下一章讨论的事情了。

在只考虑使用 Oracle JDK 的情况下,需要考虑的就只有三个因素:商用稳定性新技术

如果需要商用又不想给钱,那么就只能选择使用 Binary Code License 的版本,也就是8u201(CPU)/8u202(PSU)以及之前的版本,最后一版免费商用的 Oracle JDK 就是 Java 8u201/8u202。

如果需要稳定性就选择最新的LTS版本。

如果需要使用最新技术且对稳定性没有要求,那就谁新选谁。
如果需要使用最新技术且对稳定性有要求,那就选最新的LTS版本。

如果需要使用最新技术且对稳定性有要求,还要商用不给钱,那就只有 Open JDK builds 能救你了,这就是下下一章介绍的内容了,疯狂赶稿中……

参考资料(排名不分先后)

Java发展历程
Donald Smith-Oracle JDK Releases for Java 11 and Later
Oracle Blogs-Donald Smith
维基百科-GPL
MBA智库.百科-GPL
Oracle JDK 主页
维基百科-Java
维基百科-Java版本历史
Java CPU and PSU Releases Explained
CPU, PSU, SPU - Oracle Critical Patch Update Terminology Update
JDK Release Notes
Change to Java SE 7 and Java SE 6 Update Release Numbers
QCon 2012-Java won't curl up and die like Cobol, insists Oracle
Java 8 release delayed until next year
Oracle's Mark Reinhold-Java 8: Secure the train
Oracle Java SE Support Roadmap
Donald Smith-Update and FAQ on the Java SE Release Cadence
Oracle-Oracle Java SE Support Roadmap
Oracle-Binary Code License (Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX)
Oracle-Java SE OTN License (Oracle Technology Network License Agreement for Oracle Java SE)
Oracle-Oracle Java SE Licensing FAQ
RednaxelaFX-Oracle 终于要向 Java 的非付费用户开枪了-怎么看?
RednaxelaFX-采用java开发商业软件需要给Oracle付钱吗?
Oracle-Oracle Java SE and Oracle Java Embedded Products

版权声明
本文为[HeavenZhi]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/HeavenZhi/p/14729342.html

  1. ASP调用SDK微信分享好友、朋友圈
  2. ASP calls SDK wechat to share friends and circle of friends
  3. SpringCloud(六)Bus消息总线
  4. 详解JavaScript中的正则表达式
  5. Springcloud (6) bus message bus
  6. Explain regular expressions in JavaScript
  7. Java 响应式关系数据库连接了解一下
  8. Java14它真的来了, 真是尾气都吃不到了
  9. 视频:使用Docker搭建RabbitMQ环境
  10. Java responsive relational database connection
  11. Java14 it's really coming. I can't eat the exhaust
  12. Video: building rabbitmq environment with docker
  13. SpringCloud(六)Bus消息总线
  14. 详解JavaScript中的正则表达式
  15. Springcloud (6) bus message bus
  16. Explain regular expressions in JavaScript
  17. Docker实战:用docker-compose搭建Laravel开发环境
  18. Docker: building laravel development environment with docker compose
  19. 求助,JAVA如何获取系统当前所有进程
  20. 有人用过JMeter或用HttpUnit写过测试吗????
  21. Help, Java how to get all the current processes of the system
  22. Has anyone ever used JMeter or written tests in httpUnit????
  23. Living in a mountain village in late spring
  24. Partridge day, spring of HKUST
  25. JavaScript异步编程4——Promise错误处理
  26. 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能
  27. JavaScript asynchronous programming 4 -- promise error handling
  28. Haikang video SDK development notes (1): introduction and module functions of Hikvision webcam SDK
  29. JOP:用于FPGA的嵌入式实时系统中的Java优化处理器内核
  30. Spring Boot源码:使用MongoDB MongoTemplate公开REST在几分钟内实现CRUD功能
  31. Spring Boot应用程序事件教程 - reflectoring
  32. 带有Resilience4j断路器的Spring云网关 - rome
  33. 经验分享:Apache Kafka的缺点与陷阱 - Emil Koutanov
  34. 通过Spring Boot Webflux实现Reactor Kafka
  35. 从Java 8升级到Java 11应该注意的问题
  36. Jop: Java optimized processor core for FPGA embedded real time system
  37. Spring boot source code: use mongodb mongotemplate to open rest to realize crud function in a few minutes
  38. Spring boot application event tutorial - reflecting
  39. Spring cloud gateway with resilience4j circuit breaker - ROM
  40. Experience sharing: shortcomings and pitfalls of Apache Kafka - Emil koutanov
  41. Realization of reactor Kafka through spring boot Webflux
  42. RPC框架设计----Socket与I/0模型
  43. Problems in upgrading from Java 8 to Java 11
  44. RPC framework design -- socket and I / 0 model
  45. RPC框架设计----I/0模型
  46. RPC framework design: I / 0 model
  47. RPC框架设计----NIO编程缓冲区Buffer
  48. RPC框架设计----NIO编程缓冲区Buffer
  49. RPC framework design -- NiO programming buffer
  50. RPC framework design -- NiO programming buffer
  51. Java多线程基础
  52. Java multithreading Foundation
  53. 码农飞升记-00-Java发展历程
  54. Development history of coder-00-java
  55. 码农飞升记-00-Java发展历程
  56. Development history of coder-00-java
  57. Spring and Autumn Moon
  58. Node.js与Spring Boot比较? - Ryan Gleason
  59. Spring WebFlux的明显陷阱 - ŁukaszKyć
  60. Spring创始人Rod大叔对YAML的真实想法