发布倒计时!JDK11为我们带来哪些新特性?

  今年7月底,JDK11已经进入了Rampdown Phase Two阶段,这标志着该版本所有特性已经被冻结,不会有新的JEP会加入版本中。

  这一阶段将会修复P1–P2级BUG,之后,JDK11预定于今年9月25日发布。确定发布的17个JEP如下,其中包括14个新特性以及3个移除的功能:

  181: Nest-Based Access Control(基于嵌套的访问控制)
  309: Dynamic Class-File Constants(动态类文件常量)
  315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)
  318: Epsilon: A No-Op Garbage Collector(Epsilon — 一个无操作的垃圾收集器)

  321: HTTP Client (Standard)(标准HTTP客户端)

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

  jdk10中带来了var隐式变量声明,如:

var x = new Foo();
for (var x : xs) { ... }
try (var x = ...) { ... } catch ...

  jdk11中将允许在声明隐式类型的 lambda 表达式的形式参数时使用 var,如:

(var x, var y) -> x.process(y)

  或者干脆省略掉var符号

(x, y) -> x.process(y)

324: Key Agreement with Curve25519 and Curve448(Curve25519 和 Curve448 算法的密钥协议)
327: Unicode 10
328: Flight Recorder(飞行记录器)

  "飞行记录器"旨在“提供一个低开销的数据收集框架,用于对Java应用程序和HotSpot JVM进行故障诊断”。

329: ChaCha20 and Poly1305 
Cryptographic Algorithms(ChaCha20 和 Poly1305 加密算法)
330: Launch Single-File Source-Code Programs(启动单一文件的源代码程序)

  主要是改进 Java Launcher 以支持一个命令执行单个 Java 源代码文件。换句话说,在条件满足的情况下,可以简单地直接编译并运行单文件程序,而不再需要调用 javac ,也不需要打包 jar 文件。

  比如说,可直接运行:

java HelloWorld.java

而不再需要:

javac -d <memory> HelloWorld.java
java -cp <memory> hello.World

331: Low-Overhead Heap Profiling(低开销的 Heap Profiling)
332: Transport Layer Security (TLS) 1.3(支持 TLS 1.3)
333: ZGC: A Scalable Low-Latency Garbage Collector(可伸缩低延迟垃圾收集器)

  上一代的垃圾回收器G1已经足够强大,但是,ZGC可能会更加惊艳,ZGC的一个目标是将垃圾回收的暂停时间压缩到10ms之内,这意味着Java可以成为应用到更广泛的领域。官方文档提供了ZGC与G1的benchmarks测试对比,我们看到对比G1的156.806ms平均时间,ZGC的垃圾收集时间低至1.091ms

ZGC
                avg: 1.091ms (+/-0.215ms)
    95th percentile: 1.380ms
    99th percentile: 1.512ms
  99.9th percentile: 1.663ms
 99.99th percentile: 1.681ms
                max: 1.681ms

G1
                avg: 156.806ms (+/-71.126ms)
    95th percentile: 316.672ms
    99th percentile: 428.095ms
  99.9th percentile: 543.846ms
 99.99th percentile: 543.846ms
                max: 543.846ms

 

320: Remove the Java EE and CORBA Modules(删除 Java EE 和 CORBA 模块)
335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)
336: Deprecate the Pack200 Tools and API(弃用 Pack200 工具和 API)

此外,还有一些除 JEP 之外的API变化,比较实用的有以下几个:

String

  • lines()

  字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行

jshell> "test\nhoge\n".lines().map(String::toUpperCase).toArray()
$11 ==> Object[2] { "TEST", "HOGE" }
  • repeat(int)

  按照参数 int 提供的次数来重复字符串的运行次数

jshell> "test".repeat(3) $7 ==> "testtesttest"
  • isBlank()

  验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)

jshell> var halfSpace = "\u0020"
halfSpace ==> " "

jshell> halfSpace.isBlank()
$11 ==> true

jshell> var fullSpace = "\u3000"
fullSpace ==> " "

jshell> fullSpace.isBlank()
$13 ==> true
  • strip()/stripLeading()/stripTrailing()

  这三个方法的作用分别是去掉字符串头和尾的空白符、字符串头的空白符、字符串尾的空白符,基本与 trim()/trimLeft()/trimRight() 方法相同,不过它们的空白字符由 Character.isWhiteSpace(int) 验证

jshell> var aaa = fullSpace + "aaa" + fullSpace
aaa ==> " aaa "

jshell> aaa.strip()
$14 ==> "aaa"

jshell> aaa.trim()
$15 ==> " aaa "

Character

  • toString(int)

  JDK 11 使这个过程变得更加方便

jdk10:
jshell> Character.toString(65)
|  Error:
|  incompatible types: possible lossy conversion from int to char
|  Character.toString(65)
|

jdk11:
jshell> Character.toString(65)
$9 ==> "A"

Path

  • of(String, String...)

  此前我们需要使用 Paths.get()。现在,我们像其他类一样使用 of()。

Files

  • writeString(Path, CharSequence)

  我们可以使用该方法来保存一个 String 字符串。

jshell> Files.writeString(Path.of("test.txt"), "Hello!!!")
$3 ==> test.txt
  • readString(Path)

  我们可以使用该方法来读取一个 String 字符串。

jshell> Files.readString(Path.of("test.txt"))
$4 ==> "Hello!!!"

Collection

  • toArray(IntFunction)

此前,我们需要使用像 list.toArray(new String[list.size())]) 这样的无风格标记(non-stylish notation)来从一个集合创建一个类型化数组。现在,我们可以以风格标记(stylish notation)的方式进行编写。

jshell> List.of("aa","bb").toArray(String[]::new) $1 ==> String[2] { "aa", "bb" }

Thread

  • destroy()/stop(Throwable)

  移除 destroy() 方法,保留 stop() 方法。

  Java 9以来,oracle实行了半年一次版本的新计划,很多同学说 9未掌握10刚了解11已进冻结期,
  你呢?

参考资料:
http://openjdk.java.net/projects/jdk/11/
https://www.oschina.net/news/98314/java-11-api-changes-so-far

原文地址:https://www.cnblogs.com/lkxsnow/p/9404979.html

时间: 2024-10-28 10:37:50

发布倒计时!JDK11为我们带来哪些新特性?的相关文章

Java9都快发布了,Java8的十大新特性你了解多少呢?

Java 9预计将于今年9月份发布,这是否会是一次里程碑式的版本,我们拭目以待.今天,我们先来复习一下2014年发布的Java 8的十大新特性. Java 8可谓是自Java 5以来最具革命性的版本了,她在语言.编译器.类库.开发工具以及Java虚拟机等方面都带来了不少新特性.我们来一一回顾一下这些特性. 一.Lambda表达式 Lambda表达式可以说是Java 8最大的卖点,她将函数式编程引入了Java.Lambda允许把函数作为一个方法的参数,或者把代码看成数据. 一个Lambda表达式可

VS2013带来的&quot;新特性&quot;

VS2013除了引入"Bootstrap"库以外,最大的变化就是.net Framework 4.5以下的都不支持了.也就是说,如果不把.net库升级成.net Framework4.5, 那么MVC, WebApi等等都用不了. 1.把开源的东西简单包装下.Bootstrap是免费的. 2.把基础框架版本号升级,以前的基础平台运行不了,Win7的.net framework3.5,out了,用Windows8.1吧,Windows server2008用不了了. Bootstrap库

Xcode8 带来的新特性和坑

Xcode8新特性 Interface Builder 随着14年的iPhone6和6P出来之后,iPhone的屏幕尺寸也越来越多,屏幕适配是一个需要解决的问题,以后不一定苹果又出什么尺寸的iPhone呢. 在iPhone6和6P发布的同一年,苹果推出的Xcode6中在原有的Auto layout的基础上,添加了Size Classes新特性,通过这个新特性可以使用一个XIB或者SB文件,适配不同的屏幕以及iPhone和iPad两种设备. 在Xcode8中,苹果推出了更加强大的可视化编辑工具预览

云计算为数据中心带来的新特性

在云计算的环境下,计算资源.网络资源和存储资源都可以作为业务发放给用户,从而使得资源共享变得更加灵活和广泛,减少了用户的硬件购置,升级维护等成本终端用户可以使用各种类型的瘦客户端,在任何地方接入建立在云计算上的各类应用.理论上来说,相对于应用装在用户本地终端的传统方法,云计算用户应该获得相同或甚至更好的用户体验.为了达到这样的效果,对于支撑云计算的数据中心就有了更多新的要求.本文将逐一阐述这些数据中心的新特性,并探讨为了满足这些新特性而产生的核心技术及其演进预期.本文所述的数据中心都是指互联网数

ASP.NET Core1.0 带来的新特性

1.采用新的文件系统,不再通过工程文件(.sln和.csproj)来定义项目文件清单. 解决方案文件还是*.sln,但项目文件变成*.xproj了.在项目文件夹下新增的文件会被自动添加到项目中,不用再手动地执行把此文件包含在项目中. 2.Startup类 该类可以看作是整个ASP.NET Core的入口,该类主要存在3个方法: Main--入口方法: ConfigureServices--向IoC容器注册组件: Configure--注册Mideware 也许你第一次见到这个类会有点不明觉厉,该

C++11 带来的新特性 (1)

1 语法改进 1.1 模板表达式中的空格 在c++03 及以前 vector<list<int>>; //Error vector<list<int> >; //OK c++11 vector<list<int>>; //OK 1.2 nullptr 和 std::nullptr_t 在c++03 及以前 void f(int); void f(void*); f(0); //call f(int) f(NULL); //有歧义 c+

Atitit nodejs5 nodejs6 &#160;nodejs 7.2.1 &#160;新特性attialx总结

Atitit nodejs5 nodejs6  nodejs 7.2.1  新特性attialx总结 1.1. Node.js 4.0.0 已经发布了 .这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性1 1.2. 10月29日发布了Node.js 5.0,至此Node.js 4.0进入了长期服务支持阶段(LTS),5.0成为稳定版本.Node.js 5.x系列采用快速发布模式,计划1~2周完成一个发布.1 1.3. Node.js 6覆盖了93%的

Laravel 5.3将会有的新特性总结

Laravel地球上最好用的PHP框架,今天和大家分享的就是Laravel 5.3的相关特性,一起来看看吧. 据 Laravel 官方消息,Laravel 5.3 将在今年的 Laracon US 会议期间发布,这就意味着它将在 7 月的 28 号或者 29 号与大家见面.根据列在 Laracon 网站上的时间表,Taylor 将在 Louisville 当地时间 7 月 28 号下午 5:15 演讲,所有应该就会在那个时间.下面,带大家抢先看看 Laravel 5.3 即将带来的新特性. 1.

Atitit.jquery 版本新特性attilax总结

Atitit.jquery 版本新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升,尤其是在ie7下: 4 ⒊更好的在 ie 6/7/8 上支持 html5: 4 ⒋切换动画更加直观: 4 ⒌匿名模块定义 awd 4 ⒍jQuery.Deferred 4 ⒎jQuery.isNumeric() 4 5. Jq1.8 5 5.1. jQuery 1.8 5 5.1.1. 可定制 5 5.1.2. 自动生