Java 11正式发布 新特性你了解吗?

北京时间 9 月 26 日,Oracle 官方宣布 Java 11 正式发布。 这是Java 8 以后支持的首个长期版本。

根据官方支持路线图,Java11的高级支持将持续到2023年9月,拓展拓展支持则会覆盖到2026年9月,也就是生命周期达到8年。此前的Java 9/10仅有半年的技术支持。

为了加速迭代、及时吸收社区反馈,Java的版本发布周期已经改为每六个月一次,每年9月一个重大版本,每年3月一个升级版本,并承诺不会跳票。新的长期支持版本每三年发布一次,根据后续发布计划,下一个长期支持版Java 17将于2021年发布。

Java11也带来了大量新特性,包括新的ZGC、云计算监控诊断、Http Client、支持Unicode 10.0.0等等,一共包含17个JEP(JDK增强提案), 具体如下:

1、Unicode10

JDK 11版本包括对Unicode 10.0.0的支持。自从支持Unicode 8.0.0的JDK 10发布以来,JDK 11结合了Unicode 9.0.0和10.0.0版本,包括:16018个新的Character、18个新的Block、10个新的Script。

2、Http Client API

通过JEP 110标准化JDK 9中引入的HTTP Client API,并在JDK 10(JEP 321)中进行更新。目前Http Client已在Java 11中标准化。

这是JDK 11目前看来最大的进步之一,Java 工程师终于可以摆脱老旧的 HttpURLConnection 了。新的 HTTP API 提供了对 HTTP/2 等业界前沿标准的支持,精简而又友好的 API 接口,与主流开源 API(如,Apache HttpClient, Jetty, OkHttp 等)对等甚至更高的性能。与此同时它是 JDK 在 Reactive-Stream 方面的第一个生产实践,广泛使用了 Java Flow API 等,终于让 Java 标准 HTTP 类库在扩展能力等方面,满足了现代互联网的需求。

3、ZGC A Scalable Low-Latency Garbage Collector

Z垃圾收集器,也称为ZGC,是一个可扩展的低延迟垃圾收集器(JEP 333),它旨在实现以下目标:

  • 暂停时间不超过10s;

  • 暂停时间不会随堆或实时设置大小而增加;

  • 处理大小从几百兆到几千兆字节不等的堆。

ZGC的核心是并发垃圾收集器,这意味着在Java线程继续执行的同时完成所有繁重的工作(标记,压缩,引用处理,字符串表清理等)。这极大地限制了垃圾收集对应用程序响应时间的负面影响。目前ZGC作为实验性功能包含在内。

4、Epsilon, A No-Op Garbage Collector

Epsilon GC是新的实验性无操作垃圾收集器。Epsilon GC仅处理内存分配,并且不实现任何内存回收机制。它对性能测试非常有用,可以与其他GC的成本/收益进行对比。它可用于在测试中方便地断言内存占用和内存压力。在极端情况下,它可能对非常短暂的作业很有用,其中内存回收将在JVM终止时发生,或者在低垃圾应用程序中获得最后一次延迟改进。

从 JVM GC 的角度,JDK 11 引入了两种新的 GC,其中包括也许是划时代意义的 ZGC,虽然其目前还是实验特性,但是从能力上来看,这是 OpenJDK 的一个巨大突破,为特定生产环境的苛刻需求提供了一个可能的选择。例如,对部分企业核心存储等产品,如果能够保证不超过 10ms 的 GC 暂停,可靠性会上一个大的台阶,这是过去我们进行 GC 调优几乎做不到的,是能与不能的问题。

剩余特性如下:

  • JEP181 Nest-Based Access Control(基于嵌套的访问控制)

  • JEP309 Dynamic Class-File Constants(动态的类文件常量)

  • JEP315 Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)

  • JEP320 Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除)

  • JEP323 Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法)

  • JEP324 Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)

  • JEP328 Flight Recorder(飞行记录仪)

  • JEP329 ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)

  • JEP330 Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)

  • JEP331 Low-Overhead Heap Profiling(低开销的堆分配采样方法)

  • JEP332 Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)

  • JEP335 Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)

-JEP336 Deprecate the Pack200 Tools and API(弃用 Pack200 工具及其 API)

具体的详情有兴趣可以去看下官方文档:

看了这么多特性,那么JDK 11 是值得我们去升级的吗?

首先,从上面的信息我们可以看到,JDK 11 的发布正好处在 JDK 8 免费更新到期的前夕,同时 JDK 9、10 也陆续成为“历史版本”,而且JDK 11 是一个长期支持版本(LTS, Long-Term-Support),对于企业来说,选择 11 将意味着长期的、可靠的、可预测的技术路线图。所以LTS 版本将是企业 IT 决策者可以放心选择的版本。

JDK 更新很重要吗?

从 9 开始,JDK 进入了飞速的更新节奏,对于广大 Java 工程师来说,真是又爱又恨,Java 演进快速意味着它仍将能够保持企业核心技术平台的地位,我们对 Java 的投入也是值得的,但同时也带来了学习、选择的困惑。

在过去的很多年中,Oracle 和 OpenJDK 社区提供了接近免费的午餐,导致人们忽略了其背后的海量工作和价值,这其中包括但不仅仅限于:

大量的新特性、Bug 修复,例如,容器环境支持,GC 等基础领域的增强。很多生产开发中的 Hack,其实升级 JDK 就能解决了。

最新的安全更新,如,安全协议等基础设施的升级和维护,安全漏洞的及时修补,这是 Java 成为企业核心设施的基础之一。安全专家清楚,即使开发后台服务,而不是前端可直接接触,编程语言的安全性仍然是重中之重。

不断改进的 JVM,提供接近零成本的性能优化

“Easy is cheap”? Java 的进步虽然“容易”获得,但莫忽略其价值,这得益于厂商和 OpenJDK 社区背后的默默付出。

从 1995 年第一个版本发布到现在,Java 语言已经在跌宕起伏中走过了 23 年。这 23 年,Java 有过连续霸占排行榜第一的风光,也有近两年似乎走下神坛的颓势。Java 是最好的语言吗?不是,每个领域都有更合适的编程语言,没有无所不能的存在。

Java 语言到底有什么优势了?

其一,语法相对比较简单,学过计算机编程的开发者都能快速上手,JVM 也为开发者屏蔽了大量复杂的细节。其二,能力过硬,在若干个领域的竞争力都非常强,比如服务端编程,高性能网络程序,企业软件事务处理,大数据,分布式计算,移动、嵌入终端应用开发等等。最重要的一点是其吸收了了业界领先的工程实践,构建从嵌入式设备到超大规模软件系统的能力,充分得到了实践验证。所有这些都使得 Java 成为企业软件公司的首选,也得到很多互联网公司的青睐。不过时代在改变,Java 正在也必须改变。

Java 改为每半年发版一次以后,在对合并关键特性、快速得到开发者反馈等方面,做得越来越好,我们明显能够看到各厂商和社区对 Java 投入的提高。最新发布的 JDK 11 虽然谈不上划时代的进步,但一定是 JDK 发展历程中的一个重要版本,升级 JDK 就可以获得的性能等各种提高,基础能力的全面进步和突破,这一切无不说明,是时候开始计划升级到 JDK 11 了。

z.h.l wechat
欢迎您扫一扫,订阅我的微信公众号