文章目录
-
- 1.什么是JDK
- 2.Oracle JDK和Open JDK
- 3.什么是LTS
- 4.有哪些Open JDK发行版可选
- 5.LTS版本的主要特性
-
- 5.1.Java8
- 5.2.Java11
- 5.3.Java17
1.什么是JDK
JDK 是一个开发环境,用于使用 Java 编程语言构建应用程序和组件。
JDK 包括用于开发和测试用 Java 编程语言编写并在 Java 平台上运行的程序的工具。
----Oracl Java
JDK的两个大版本是Oracle JDK
和Open JDK
,都属于Oracle。Oracle收购了SUN。
Oracle JDK是Oracle基于免费的商业许可证版本,Java Downloads | Oracle
Open JDK是Oracle在开源许可证下的免费版本,JDK Builds from Oracle (java.net)
2.Oracle JDK和Open JDK
这两个JDK最大不同就是许可证不一样。但是对于个人用户来讲,没区别。
java --version
命令客户查看版本。
C:\> java -version
java version "17" 2021-09-14 LTS
Java(TM) SE Runtime Environment (build 17+35-LTS-2724)
Java HotSpot(TM) 64-Bit Server VM (build 17+35-LTS-2724, mixed mode, sharing)
[root@ ~]# java --version
openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)
Oracle JDK | Open JDK | |
---|---|---|
来源 | Oracle团队维护 | Oracle和Open Java社区 |
授权协议 | Java 17及更高版本 Oracle Java SE 许可证 Java16及更低版本甲骨文免费条款和条件 (NFTC) 许可协议 (oracle.com) |
GPL v2许可证 |
关系 | 由Open JDK构建,增加了少许内容 | |
发行周期 | 6个月,每两年一个LTS | 6个月 |
是否收费 | 2021年9月起Java17及更高版本所有用户免费。 16及更低版本,个人用户、开发用户免费。 |
2017年9月起,所有版本免费 |
LTS | 目前7,8,11,17 | 无,但是有社区编译的其他支持 |
对语法的支持 | 一致 | 一致 |
性能 | 最佳 | 接近,几乎无差 |
3.什么是LTS
LTS(Long-term Support)即长期支持。Oracle官网提供了对Oracle JDK个别版本的长期支持,即使发发行了新版本,比如目前最新的JDK18,在结束日期前,LTS版本都会被长期支持。(出了bug,会被修复,非LTS则不会再有补丁发布)
所以,一定要选一个LTS版本,不然出了漏洞没人修复了。
版本 | 开始日期 | 结束日期 | 延期结束日期 | |
---|---|---|---|---|
7(LTS) | 2011年7月 | 2019年7月 | 2022年7月 | |
8(LTS) | 2014年3月 | 2022年3月 | 2030年12月 | |
11(LTS) | 2018年9月 | 2023年9月 | 2026年9月 | |
17(LTS) | 2021年9月 | 2026年9月 | 2029年9月 | |
21(LTS) | 2023年9月 | 2028年9月 | 2031年9月 |
如果要选择Oracle JDK,目前可选的LTS版本为8、11、17三个。
4.有哪些Open JDK发行版可选
Open JDK 虽然没有官方的LTS版本,但是开源社区有支持。会有一些公司或组织基于Open JDK做发行版,提供LTS。
名称 | 支持团队 | 官网 |
---|---|---|
AdoptOpenJDK | Amazon,Microsoft,IBM,Red Hat,Pivotal(EMC和VMware) | AdoptOpenJDK - 开源,预建OpenJDK二进制文件 |
Alibaba Dragonwell (龙井) |
阿里巴巴 | Dragonwell (dragonwell-jdk.io) |
Tencent Kona | 腾讯 | Home · Tencent/TencentKona-8 Wiki · GitHub |
Microsoft JDK | Microsoft微软 | Microsoft Build of OpenJDK |
毕昇JDK | 华为 | 毕昇JDK-鲲鹏社区 (hikunpeng.com) |
Amazon Corretto | Amazon亚马逊 | Amazon Corretto |
以上是比较出名的版本。有些JDK加入了自己的特色。
建议AdoptOpenJDK。
5.LTS版本的主要特性
5.1.Java8
8比7更新的东西比较多,可以说是里程碑式更新。加入了函数式、lambda等。
- Stream API。流
- 新的日期和时间API,LocalDate、LocalDateTime
- Lambda语法
- 函数式接口
- 接口可以添加非抽象方法,default关键字
- JVM移除永久代,增加元空间’
JDK 8 Features (java.net)
5.2.Java11
- 模块化(jdk9)
- 默认G1垃圾回收器(jdk9)
- 局部变量类型推断(jdk10)
- 移除Java EE(jdk11)
- 合并javac和java命令(jdk11)
之前运行Java文件的命令javac HelloWorld.java java HelloWorld
现在可以
java HelloWorld.java
JDK 9 (java.net)
JDK 10 (java.net)
JDK 11 (java.net)
5.3.Java17
17是第一个支持ZGC的LTS版本。有条件的话,用JDK17。
- 试验ZGC,需要在JVM配置(jdk11)
- 文本块升级。(jdk13)
- switch支持lambda(jdk13预览,jdk14)
- ZGC 可用于生产环境(jdk15)
- record(jdk14,15预览,jdk16)
- Realed class密封类(jdk15,16预览,jdk17)
- 统一日志支持异步日志刷新(jdk17)
JDK 12 (java.net)
JDK 13 (java.net)
JDK 14 (java.net)
JDK 15 (java.net)
JDK 16 (java.net)
JDK 17 (java.net)