Java 11于2018年9月25日宣布,这是Oracle对Java社区的最新长期支持版本。 以下列出了最重要的功能和更改:
Type inference for Lambda parameters
的变种 key word was introduced in Java 10 to implement local scope 变种iables with dynamic type inference.
var aString = "This is a String";
在Java 11中,变种关键字可用于限定给定的lambda参数
Predicate<String> notNull = (var u) -> u != null;
HTTP Client
这是JDK 9的孵化功能。这是一个标准API,支持HTTP / 1,HTTP / 2客户端,同步,异步和反应功能样式。 Oracle HTTP客户端页面上的以下代码对此进行了说明:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://openjdk.java.net/"))
.build();
client.sendAsync(request, asString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
TLS 1.3
Java 11随附了传输层安全协议(TLS)1.3版的实现。 TLS是用于在通信通道的两端之间提供安全的数据交换的协议。 它定义了一个具有以下3个主要标准的安全通信通道:
- 认证方式保密廉正
TLS 1.3由两个主要规范组成:
- 建立通信,即握手阶段管理,两个对等方通过密钥交换和密码算法协商交换的安全性数据交换阶段,又名“记录协议”,其中流量被视为第一阶段的参数保护的记录传输。
作为题外话,请参阅“参考”段落中的链接以获取更多信息。 JDK指导委员会之所以包括TLS 1.3实施,是因为它作为安全协议具有很强的鲁棒性,并与实施该协议的其他供应商保持竞争优势。 紧随其后的是,TLS实现包括用于签名和加密的各种加密算法。
Performance related features
JDK 11在性能增强和工具方面做了大量工作。 意识到垃圾收集是Java性能的关键点这一事实,为GC引入了以下功能:
- ZGC:尽管是实验性的,但ZGC保证了低延迟时间(少于10ms)和广泛的内存大小支持(从数百兆字节到TB字节)。 仅适用于Linux x64。Epsilon GC:一个慷慨的GC,它分配内存而不回收它。 对于性能测试和短暂的Java进程很有用。
性能工具在此版本中占有很大份额:
- 低开销堆分析:提供了一种非侵入性的方式来监视Java内存堆分配。 实际上,它是可用于JVMTI(JVM工具接口)的编程本机API,用于获取有关堆上对象的信息。Java飞行记录器: an important tool for low overhead performance data troubleshooting and collection. It produces dump data that can be red by Java Mission Control tool. In a nutshell, we start the tool on the command line as the following
jcmd <pid> JFR.start
哪里pid是已经运行的Java应用程序的进程ID。 要指定将记录应用程序性能状态的转储过程文件,请使用以下命令
jcmd <pid> JFR.dump filename=recording.jfr
要停止录制,请发出命令
jcmd <pid> JFR.stop
生成的文件可以通过其他分析工具导入。
Deprecation and removal of some features from the JDK
JavaFx不再是JDK的一部分,而是单独下载。 Oracle停止通过Server JRE提供32位二进制文件和自动更新。 删除了以下模块:
- 科尔巴JAXB,JAX-WS,JAF和常见注释Nashorn JavaScript Engine已弃用Java WebStart和Java Plugin的包装
对于Corba和其他J2EE模块(如JAXB和JAX-WS),删除它们是合理的,因为它们可以在JDK领域之外发展和维护,并且同步更改变得越来越困难。
Minor Features
JDK 11附带了对Unicode 10的支持,这意味着我们可以打印表情符号。 另一个功能是可以通过调用一次执行单个Java文件程序
java OneClassFileProgram.java
而不是通常的顺序(先是javac,然后是java)。 在引擎盖下,光盘上没有任何类文件,全部在内存中。
References
- Main feature page: http://openjdk.java.net/projects/jdk/11
- Oracle migration guide: https://docs.oracle.com/en/java/javase/11/migrate/index.html
- Oracle HTTP Client: http://openjdk.java.net/groups/net/httpclient/recipes-incubating.html
- TLS 1.3: https://tools.ietf.org/html/rfc8446