Java版本特性(TODO)
版本 | 开始日期 | 结束日期 | 延期结束日期 |
---|---|---|---|
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月 |
Open JDK发行版可选
Open JDK 虽然没有官方的LTS版本,但是开源社区有支持。会有一些公司或组织基于Open JDK做发行版,提供LTS,建议AdoptOpenJDK。。
名称 | 支持团队 | 官网 |
---|---|---|
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 |
Java 17
第一个支持ZGC的LTS版本。
- 试验ZGC,需要在JVM配置(jdk11)
- 文本块升级。(jdk13)
- switch支持lambda(jdk13预览,jdk14)
- ZGC 可用于生产环境(jdk15)
- record(jdk14,15预览,jdk16)
- Realed class密封类(jdk15,16预览,jdk17)
- 统一日志支持异步日志刷新(jdk17)
Java 11
模块化
module,open,exports; http://www.cnblogs.com/IcanFixIt/p/7144366.html
jshell
反应式流 ( Reactive Streams )
java.util.concurrent.Flow
类,Flow.Publisher、Flow.Subscriber、Flow.Subscription 和 Flow.Processor 等 4 个核心接
变量句柄
VarHandle
类,变量句柄是一个变量或一组变量的引用,包括静态域,非静态域,数组元素和堆外数据结构中的组成部分等
-
- 取代
java.util.concurrent.atomic
包以及sun.misc.Unsafe
类的功能;
- 取代
MethodHandles
改进方法句柄,添加更多静态方法创建不同类型方法句柄
-
arrayConstructor:创建指定类型的数组。
-
arrayLength:获取指定类型的数组的大小。
- varHandleInvoker 和 varHandleExactInvoker:调用 VarHandle 中的访问模式方法。
- zero:返回一个类型的默认值。
- empty:返 回 MethodType 的返回值类型的默认值。
- loop、countedLoop、iteratedLoop、whileLoop 和 doWhileLoop:创建不同类型的循环,包括 for 循环、while 循环 和 do-while 循环。
- tryFinally:把对方法句柄的调用封装在 try-finally 语句中。
局部变量类型推断
应用程序类数据共享
Class Data Sharing特性在原来的 bootstrap 类基础之上,扩展加入了应用类的 CDS (Application Class-Data Sharing) 支持;当多个 Java 虚拟机(JVM)共享相同的归档文件时,还可以减少动态内存的占用量,同时减少多个虚拟机在同一个物理或虚拟的机器上运行时的资源占用。
进程
Process API
非常适合耗时较长的进程调用。
ProcessHandle
提供了对本地进程的控制,可以监控其存活,查找其子进程,查看其信息,甚至销毁它。
Stack-Walking API
一个标准API用于访问当前线程栈。
线程-局部管控
将允许在不运行全局 JVM 安全点的情况下实现线程回调,由线程本身或者 JVM 线程来执行,同时保持线程处于阻塞状态,这种方式使得停止单个线程变成可能,而不是只能启用或停止所有线程。
JNI Native Header
合并javac和java命令(jdk11)
-
生成 Native-Header 直接用 java 命令;
-
简化启动单个源代码文件,java HelloWorld.java;
异步非阻塞的Http Client
- 支持异步非阻塞的Http Client,支持HTTP/1.1和HTTP/2;
GC
默认 G1 垃圾回收器:废弃CMS
并行全垃圾回收器 G1:之前 Java 版本中的 G1 垃圾回收器执行 GC 时采用的是基于单线程标记扫描压缩算法(mark-sweep-compact),采用并行化 mark-sweep-compact 算法,并使用与年轻代回收的相同数量的线程(-XX:ParallelGCThread);
实验性质:
-
Epsilon:低开销垃圾回收器,-XX:+UseEpsilonGC;
-
ZGC:可伸缩低延迟垃圾收集器,--with-jvm-features=zgc;
incurator HTTP/2?
支持异步非阻塞的Http Client,支持HTTP/1.1和HTTP/2;
FlightRecording
飞行记录器(JDK8时为商业版):低开销的事件信息收集框架,主要用于对应用程序和 JVM 进行故障检查、分析,-XX:StartFlightRecording;