Java语言特性系列
本文主要讲述一下Java11的新特性javascript
java -version openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
相关解读 Java Nestmate稳步推动, Specification for JEP 181: Nest-based Access Control
简单的理解就是Class类新增了getNestHost,getNestMembers方法
相关解读 Specification for JEP 309: Dynamic Class-File Constants (JROSE EDITS)
jvm规范里头对Constant pool新增一类CONSTANT_Dynamic
对于AArch64处理器改进现有的string、array相关函数,并新实现java.lang.Math的sin、cos、log方法
引入名为Epsilon的垃圾收集器,该收集器不作任何垃圾回收,可用于性能测试、短生命周期的任务等,使用-XX:+UseEpsilonGC开启
将java9标记废弃的Java EE及CORBA模块移除掉,具体以下:(1)xml相关的,java.xml.ws, java.xml.bind,java.xml.ws,java.xml.ws.annotation,jdk.xml.bind,jdk.xml.ws被移除,只剩下java.xml,java.xml.crypto,jdk.xml.dom这几个模块;(2)java.corba,java.se.ee,java.activation,java.transaction被移除,可是java11新增一个java.transaction.xa模块
相关解读 java9系列(六)HTTP/2 Client (Incubator), HTTP Client Examples and Recipes,在java9及10被标记incubator的模块jdk.incubator.httpclient,在java11被标记为正式,改成java.net.http模块。
相关解读 New Java 11 Language Feature: Local-Variable Type Inference (var) extended to Lambda Expression Parameters
容许lambda表达式使用var变量,好比(var x, var y) -> x.process(y),若是仅仅是这样写,却是没法看出写var有什么优点并且反而以为有点画蛇添足,可是若是要给lambda表达式变量标注注解的话,那么这个时候var的做用就突显出来了(@Nonnull var x, @Nullable var y) -> x.process(y)
使用RFC 7748中描述的Curve25519和Curve448实现key agreement
升级现有的API,支持Unicode10.0.0
相关解读 Java 11 Features: Java Flight Recorder
Flight Recorder之前是商业版的特性,在java11当中开源出来,它能够导出事件到文件中,以后能够用Java Mission Control来分析。能够在应用启动时配置java -XX:StartFlightRecording,或者在应用启动以后,使用jcmd来录制,好比
$ jcmd <pid> JFR.start $ jcmd <pid> JFR.dump filename=recording.jfr $ jcmd <pid> JFR.stop
实现 RFC 7539的ChaCha20 and ChaCha20-Poly1305加密算法
相关解读 Launch Single-File Source-Code Programs in JDK 11
有了这个特性,能够直接java HelloWorld.java来执行java文件了,无需先javac编译为class文件而后再java执行class文件,两步合成一步
经过JVMTI的SampledObjectAlloc回调提供了一个开销低的heap分析方式
支持RFC 8446中的TLS 1.3版本
相关解读 JDK11的ZGC小试牛刀, 一文读懂Java 11的ZGC为什么如此高效
相关解读 Oracle弃用Nashorn JavaScript引擎, Oracle GraalVM announces support for Nashorn migration
废除Nashorn javascript引擎,在后续版本准备移除掉,有须要的能够考虑使用GraalVM
废除了pack200以及unpack200工具以及java.util.jar中的Pack200 API。Pack200主要是用来压缩jar包的工具,不过因为网络下载速度的提高以及java9引入模块化系统以后再也不依赖Pack200,所以这个版本将其移除掉。
上面列出的是大方面的特性,除此以外还有一些api的更新及废弃,主要见What's New in JDK 11 - New Features and Enhancements以及90 New Features (and APIs) in JDK 11,这里举几个例子。html
@Test public void testCollectionToArray(){ Set<String> names = Set.of("Fred", "Wilma", "Barney", "Betty"); String[] copy = new String[names.size()]; names.toArray(copy); System.out.println(Arrays.toString(copy)); System.out.println(Arrays.toString(names.toArray(String[]::new))); }
Collection类新增toArray(IntFunction)的default方法,能够直接经过传入IntFunction告知要转换的目标类型
@Test public void testStrip(){ String text = " \u2000a b "; Assert.assertEquals("a b",text.strip()); Assert.assertEquals("\u2000a b",text.trim()); Assert.assertEquals("a b ",text.stripLeading()); Assert.assertEquals(" \u2000a b",text.stripTrailing()); }
java11对String类新增了strip,stripLeading以及stripTrailing方法,除了strip相关的方法还新增了isBlank、lines、repeat(int)等方法
Long-Term Support
)版本(oracle版本才有LTS
),这个版本最主要的特性是:在模块方面移除Java EE以及CORBA模块,在JVM方面引入了实验性的ZGC,在API方面正式提供了HttpClient类。官方解读
)官方细项解读
)