闲语

2018年9月25日,Java 11正式发布,与JDK 10不同,JDK 11将提供长期支持,还将作为Java平台的参考实现以及标准版(Java SE)11。Oracle直到2023年9月都会为JDK 11提供一级支持,而补丁和安全警告等扩展支持将延续到2026年。新的LTS版本每三年发布一次,JDK 17将于2021年发布,预计将成为下一个LTS版本。临时版本将每六个月发布一次。本文将介绍 Java 11 的新功能以及删除的功能。

Java 11 的新功能

JDK 11有16个新功能:

  • 通过lang.Math在Aarch64处理器上实现sin,cos和log函数的新内在函数,改进Aarch64内在函数。该提案强调专用的CPU体系结构特定的代码模式,可提高应用程序和基准性能。
  • 基于嵌套的访问控制引入了嵌套,这是一种与Java语言中嵌套类型概念一致的访问控制上下文。嵌套允许逻辑上属于同一代码实体的类,但编译为不同的类文件以访问彼此的私有成员,而无需编译器插入可访问性扩展桥接方法。
  • 传输层安全性(TLS)1.3,其中TLS协议的这种大修将适用于JDK 11,从而提供显着的安全性和性能优势。但是,没有目标支持TLS 1.3的每个功能。为了最大限度地降低不兼容的风险,TLS 1.3默认会实现向后兼容模式。应用程序可以根据需要关闭或打开此模式。
  • Nashorn JavaScript引擎与JJS工具(Java 8里面的新特性)的弃用,旨在将来删除它们。鉴于ECMAScript语言构建和API的快速调整和修改,Oracle发现Nashorn难以维护。
  • HTTP客户端(标准),它标准化了JDK 9中引入并在JDK 10中更新的孵化HTTP API客户端。API提供非阻塞请求和响应语义CompleteableFutures,可以链接到触发器依赖操作。在JDK 9和10中孵化之后,现在异步的实现几乎已经完全重写.RX Flow概念已经被推入实现中,消除了支持HTTP / 2所需的许多自定义概念。现在可以更轻松地跟踪数据流,从用户级请求发布者和响应发布者到底层套接字。这降低了复杂性并最大化了HTTP / 1和HTTP / 2之间重用的可能性。
  • 被称为“无操作”收集器的Epsilon垃圾收集器将处理内存分配,而不实现任何实际的内存回收机制。Epsilon的用例包括性能测试,内存压力和虚拟机接口。它也可以用于短期工作。
  • lambda参数的局部变量语法应该将隐式类型表达式中的形式参数声明的语法与局部变量声明的语法对齐。这将允许var 在声明隐式类型的lambda表达式的形式参数时使用。
  • 将扩展Java类文件格式以支持新的常量池形式CONSTANT_Dynamic。目标是降低开发新形式的可实现类文件约束的成本和中断。
  • 与现有的椭圆曲线Diffie-Hellman方案相比,与Curve25519和Curve448密码学的密切协议应该更加有效和安全。根据IETF的说法,两条椭圆曲线Curve25510和Curve448可以实现恒定时间实现和无异常的标量乘法,这种乘法更能抵抗一系列的旁道攻击,包括定时和缓存攻击。该提案的目标包括API和密钥协商方案的实现,以及独立于平台的全Java实现的开发。但是,作为提案的一部分,模块化算法实现的复杂性和微妙性存在风险。
  • Flight Recorder将提供一个低开销的数据收集框架,用于对Java应用程序和HotSpot JVM进行故障排除。Flight Recorder已成为Oracle商业JDK的一项功能,但其源代码将移至开放式存储库以使该功能普遍可用。Iclouded将是用于生成和使用数据作为事件的API,提供缓冲机制和二进制数据格式以及启用事件的配置和过滤。该提案还要求为OS,HotSpot和JDK库提供事件。
  • 升级平台API以支持Unicode版本10.0,从而使Java保持最新。预计将在以下类别中提供支持:
    • Character和String在lang包
    • NumericShaper在awt.font
    • BidiBreakIterator和Normalizer在text
  • 实施ChaCha20和Poly1305加密算法。ChaCha2020是一种相对较新的流密码,可以取代旧的,不安全的R4流密码。ChaCha20将与Poly1305验证器配对。将提供ChaCha20和ChaCha20-Poly1305密码实现,使用crypto.CipherSpiAPI 在SunJCE(Java密码术扩展)提供程序中实现算法。
  • 增强Java启动程序以运行作为Java源代码的单个文件提供的程序,因此这些程序可以直接从源代码运行。在学习Java的早期阶段编写小实用程序或开发人员时,单文件程序很常见。此外,单个源文件可能会编译为多个类文件,这会增加打包开销。在这些情况下,必须在运行之前编译程序只是基于传统的不必要的步骤。
  • 低开销堆分析,提供了一种可以通过JVM工具接口访问Java堆分配的方法。这项工作的目标是以低开销的方式获取有关这些分配的信息,可以通过编程接口访问,并可以对所有分配进行采样。实施独立性和提供关于实时和死堆的数据也是目标。糟糕的堆管理可能导致堆耗尽和垃圾收集颠簸。解决此问题的大多数工具都缺少特定分配的调用站点,这些信息对于调试内存问题至关重要。
  • Pack200和Unpack200工具以及Pack200 API的弃用util.jar。Pack200是.jar文件的压缩方案,旨在降低应用程序打包,传输和交付的磁盘和带宽要求。项目负责人表示,维护成本和低使用率并不能证明其保留是合理的。
  • 所述ž垃圾收集器(ZGC),实验,低延迟垃圾收集器,以处理堆从相对小到非常大的堆的是在尺寸上许多兆兆字节。通过使用ZGC,暂停时间不应超过10毫秒,与使用G1收集器相比,应用程序吞吐量减少不应超过15%。ZGC还为未来的功能和优化奠定了基础。Linux / x64将是第一个获得ZGC支持的平台。

Java 11删除的功能

  • Java EE和CORBA模块(最近更名为Jakarta EE)模块从Java SE9就成了不推荐使用(deprecated),并在JDK 11中删除。
  • Java SE 6于2006年12月发布,它为Java EE平台提供了整套的Web服务技术栈:JAX-WS(Java API for XML-based Web Services),JAXB(Java Architecture for XML Binding),JAF(JavaBeans Activation Framework),以及Common Annotations for Java。这些年来,Java EE版本在不断进化,这给Java SE造成了许多麻烦,例如加入与Java SE无关的技术,以及同时维护两个Java版本的困难变得更大。由于独立的Java EE版本由第三方网站提供,Oracle说Java SE或JDK中已经没有必要提供Java EE了。当然,一些依赖于JDK中的Java EE API及工具的应用程序将无法编译或运行。将JDK 6、7或8移植到新版本时将会产生二进制不兼容和源代码不兼容。Oracle说,受到这些影响的开发者可以部署相应的Java EE版本。
  • CORBA来自于二十世纪九十年代,Oracle说,现在用CORBA开发现代Java应用程序已经没有意义了,维护CORBA的成本已经超过了保留它带来的好处。但是删除CORBA将使得那些依赖于JDK提供部分CORBA API的CORBA实现无法运行。目前还没有第三方CORBA版本,也不确定是否会有第三方愿意接手CORBA API的维护工作。
  • JavaFX已经被移除,它现在可作为独立技术使用,因此已经与Java JDK每年两次的更新无关。

参考资料

  https://www.infoworld.com/article/3265447/java/java-jdk-11-all-the-new-features-now-available.html?nsdr=true

  https://cloud.tencent.com/developer/article/1154762

【整理】Java 11新特性总结的更多相关文章

  1. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  2. 最通俗易懂的 Java 11 新特性讲解

    大多数开发者还是沉浸在 Java 8 中,而 Java 14 将要在 2020 年 3 月 17 日发布了,而我还在写着 Java 11 的新特性.Java 11 是 Java 8 之后的第一个 LT ...

  3. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  4. 【整理】Java 8新特性总结

    闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...

  5. Java 5-11新特性的整理(转)

    Java 5-11新特性的整理(转) 作者:拔剑少年 简书地址:https://www.jianshu.com/u/dad4d9675892博客地址:https://it18monkey.github ...

  6. Java 8 新特性终极版

    声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...

  7. [转载] C++11新特性

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  8. C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

  9. Java 8新特性探究(八)精简的JRE详解

    http://www.importnew.com/14926.html     首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 ...

随机推荐

  1. cf1133 bcdef

    b所有数模k,记录出现次数即可 #include<bits/stdc++.h> using namespace std; int main(){ ]; ]={}; cin>>n ...

  2. bzoj 1495

    这是一道...卡了我一个月的树形dp... 我真是太弱了... 其实仔细想想,这题的核心思路并不是特别复杂,但是的确存在不小的难度 作为一个看过全网基本所有题解+标程才弄明白这题到底怎么回事的蒟蒻,我 ...

  3. Java和C冒泡排序

    Java 示例代码: public class test { public static void main(String[] args) { String str = "321dca5&q ...

  4. 论文阅读笔记十五:Pyramid Scene Parsing Network(CVPR2016)

    论文源址:https://arxiv.org/pdf/1612.01105.pdf tensorflow代码:https://github.com/hellochick/PSPNet-tensorfl ...

  5. 饮冰三年-人工智能-Python-14Python基础之变量与函数

    1:函数:函数是逻辑结构化和过程化的一种编程方法.函数即变量 #参数组:**字典 *列表 def test(x,*args): print(args); print(args[0]); print(& ...

  6. Just oj 2018 C语言程序设计竞赛(高级组)H: CBT?

    H: CBT? 时间限制: 1 s      内存限制: 128 MB      提交 我的状态 题目描述 对于二叉树,如果这棵树的节点排布是按行从上到下,每行从左到右挨个放置,中间不会有空闲的节点. ...

  7. 16位和32位的80X86汇编语言的区别

    需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性.对于IA-32架构平台而言,选用的32位80386汇编语言,也就只说讨论的操作系统平台是 ...

  8. 微信小程序如何自动弹出提示微信授权?

    我想在一进入页面的时候就进行判断提示并且弹出提示授权!请问该如何处理比较合理 wx.authorize({}) //可以通过 wx.getSetting 先查询一下用户是否授权了 "scop ...

  9. Caused by: java.lang.NumberFormatException: For input string: "18446744073709551615"

    问题:Caused by: java.lang.NumberFormatException: For input string: "18446744073709551615" 原因 ...

  10. Oracle数据重复,只取一条

    --方法一 select * from tb_supply where rowid=any(select max(rowid) from tb_supply group by phone_id) -- ...