为什么大家必须关注Java11?
因为这是Java8之后的首个官方长期支持的版本,技术支持时间直到2023年9月份,补丁和扩展支持直到2026年9月份。
美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!
image.png
Java11下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
Java8~Java11及后续版本路线图
我们来看下面这张Oracle官方发布的支持路线图:
通过上面这张图能够看到Java9和Java10都是没有被长期支持的版本。
新的长期支持版本每三年发布一次,根据后续的发布计划,下一个长期支持版 Java 17 将于2021年发布。
image.png
Java 11 全部新特性
官网公开的 17 个 JEP(JDK Enhancement Proposal 特性增强提议):
181: Nest-Based Access Control(基于嵌套的访问控制)
309: Dynamic Class-File Constants(动态的类文件常量)
315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)
318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被称为"No-Op(无操作)"回收器)
320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除)
321: HTTP Client (Standard)
323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法)
324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)
327: Unicode 10
328: Flight Recorder(飞行记录仪)
329: ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)
330: Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)
331: Low-Overhead Heap Profiling(低开销的堆分配采样方法)
332: Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)
333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩的低延迟垃圾回收器,处于实验性阶段)
335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)
336: Deprecate the Pack200 Tools and API(弃用 Pack200 工具及其 API)
Java11重点的新特性解析
上图是Oracle公布的Java 11包含的所有新特性,其中几个重点的新特性如下:
ZGC:可扩展的低延迟垃圾收集器
ZGC是一款号称可以保证每次GC的停顿时间不超过10MS的垃圾回收器,并且和当前的默认垃圾回收起G1相比,吞吐量下降不超过15%。
Epsilon:什么事也不做的垃圾回收器
Java 11还加入了一个比较特殊的垃圾回收器——Epsilon,该垃圾收集器被称为“no-op”收集器,将处理内存分配而不实施任何实际的内存回收机制。 也就是说,这是一款不做垃圾回收的垃圾回收器。这个垃圾回收器看起来并没什么用,主要可以用来进行性能测试、内存压力测试等,Epsilon GC可以作为度量其他垃圾回收器性能的对照组。大神Martijn说,Epsilon GC至少能够帮助理解GC的接口,有助于成就一个更加模块化的JVM。
增强var用法
Java 10中增加了本地变量类型推断的特性,可以使用var来定义局部变量。尽管这一特性被很多人诟病,但是并不影响Java继续增强他的用法,在Java 11中,var可以用来作为Lambda表达式的局部变量声明。
移除Java EE和CORBA模块
早在发布Java SE 9的时候,Java就表示过,会在未来版本中将Java EE和CORBA模块移除,而这样举动终于在Java 11中实施。终于去除了Java EE和CORBA模块。
HTTP客户端进一步升级
JDK 9 中就已对 HTTP Client API 进行标准化,然后通过JEP 110,在 JDK 10 中进行了更新。在本次的Java 11的更新列表中,由以JEP 321进行进一步升级。该API通过CompleteableFutures提供非阻塞请求和响应语义,可以联合使用以触发相应的动作。 JDK 11完全重写了该功能。现在,在用户层请求发布者和响应发布者与底层套接字之间追踪数据流更容易了,这降低了复杂性,并最大程度上提高了HTTP / 1和HTTP / 2之间的重用的可能性。
到底要不要升级到Java11呢?
基于以上重点特性的分析以及长期支持来看:
对于企业来说,生产环境中的JDK版本升级到Java 11还是有必要的。主要有两个原因:
1、Oracle官方对Java 11提供长期支持,生产环境大可放心使用。而且下一个长期支持的版本会在三年后才会发布。
2、Java11提供了ZGC的新特性,这是一款具有划时代意义的垃圾回收器。优点不再赘述。有了ZGC,JVM的性能瓶颈可以被突破。
对于开发者来说
在编码方面,Java 11并没有像Java 8那样变化巨大,毕竟Java 8提供了函数式编程的能力,函数式编程比如对集合等的流式操作,极大提高了编码效率,这也是很多开发者学习Java 8的一个重要原因。
但是,Java 11也并不是完全没有提升,至少在新版本中,Java开发者终于可以摆脱老旧的HttpURLConnection了。新的HTTP API提供了对HTTOP/2等业界前沿标准的支持,提供了精简而又友好的API接口。
所以,综上所述,无论是对于企业还是开发者来说,升级Java11都是有必要的。
新项目可以直接使用Java11了,对于项目中使用Java8或者更低版本可以升级到Java11,后续新的功能需求使用Java11里的新特性来体验给我们带来的好处。
相关链接
另参考博客:https://mp.weixin.qq.com/s/Yz8V3inWN8uErKM-IdMFWQ
大家也可参考我的Github项目,里面有大量的Java8新特性示例以及部分源码分析:https://github.com/david1228/sparrow
网友评论