今年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

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

  1. 如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap"

    刚看到Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看 看了下VS2013带来的"新特性",直觉上看,除了引 ...

  2. 如何使用开源库,吐在VS2013发布之前,顺便介绍下V2013的新特性"Bootstrap"

    如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap" 刚看到Visual Studio 2013 Preview - ASP.NET, M ...

  3. Java9发布回顾Java 8的十大新特性

    java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9. 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性.先来喝杯java~~~ 按 ...

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

    Java 9预计将于今年9月份发布,这是否会是一次里程碑式的版本,我们拭目以待.今天,我们先来复习一下2014年发布的Java 8的十大新特性. Java 8可谓是自Java 5以来最具革命性的版本了 ...

  5. 尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性

    本文首发于<尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性> 概述 .NET开发者们大家好,我是Rector. 几天前(美国时间2 ...

  6. Git 2.7: 一个新的带来许多新特性和性能提升的主要版本

    在2.6版本发布两个月之后,Git 2.7发布.该版本带来了许多新特性以及性能的提升. 本文选取了Git 2.7带来的主要变化: git remote支持get-url子命令,可以显示指定远端的URL ...

  7. Xcode8 带来的新特性和坑

    Xcode8新特性 Interface Builder 随着14年的iPhone6和6P出来之后,iPhone的屏幕尺寸也越来越多,屏幕适配是一个需要解决的问题,以后不一定苹果又出什么尺寸的iPhon ...

  8. Java 14 可能带来什么新特性?

    JDK/Java 13 在一个月前已经发布,该版本带来了 5 大新特性,笔者观察到其中的 Text Blocks(文本块)特性似乎被讨论最多. 文本块特性与常见的 Python "" ...

  9. .NET 5 带来的新特性 [MemberNotNull] 与 [MemberNotNullWhen]

    MemberNotNullAttribute是 .NET 5 的新增特性,位于System.Diagnostics.CodeAnalysis.该特性用于显式声明,调用此方法后该值不再为 Null.示例 ...

随机推荐

  1. Java语言实现简单FTP软件------>辅助功能模块FTP站点管理的实现(十二)

    1.FTP站点管理 点击"FTP站点管理"按钮,弹出对话框"FTP站点管理",如下图 1) 连接站点 在FTP站点管理面板上选好要连接的站点,点击"连 ...

  2. windows7下cmd命令窗口没有滚动条的解救方法

    由于昨天的好123问题没有解决,我想查看一下本机的ip地址等,于是打开了cmd窗口,输入ipconfig/all命令进行查看,但是发现出现了下面的窗口,无法进行滚动,完全无法查看详细的信息. 然后我百 ...

  3. Android Media应用开发

    Java层API : AudioRecord 采集音频(PCM格式)AudioTrack 播放音频 Camera 用来采集摄像头的数据Surface / SurfaceView / GLSurface ...

  4. MD5文件

    我从某网站下载了一个iso系统镜像,我担心下载下来之后,被我电脑上的病毒感染了.我要确定这个文件还是“原汁原味”,就可以用软件再次生成该文件的md5码,然后和网站上的md5码对比一下就可以了.我用的是 ...

  5. [MEF] 学习之一 入门级的简单Demo

    MEF 的精髓在于插件式开发,方便扩展. 我学东西,习惯性的先搞的最简单的Demo出来,看看有没有好玩的东东,然后继续深入.这个博文,不谈大道理,看demo说事儿. 至于概念,请google ,大把大 ...

  6. Linux查看硬盘使用情况

    df df - report file system disk space usage df是查看文件系统磁盘使用情况的命令.如: # df -h Filesystem Size Used Avail ...

  7. 第十篇、模块一、sys\os\hashlib模块的应用

    一.模块分为三种 1)自定义模块 2)第三方模块 3)内置模块 如何导入模块? 下面两种: 1)import 模块名字  as 别名(重新给模块命名) 2)from  模块名字  import 功能( ...

  8. 什么是shell【TLCL】

    常用命令 date cal df——report file system disk space usage free——display amount of free and used memory i ...

  9. Spring- 通过Xml的方式完成Bean的实例化

    传统应用程序可以通过反射方式进行实例化Bean,而Spring Ioc 容器则需要根据Bean定义的配置元数据使用反射机制来创建Bean.在Spring Ioc 容器中主要有以下几种创建Bean实例的 ...

  10. python第六篇:Python复制超大文件、复制二进制文件

    Python文件复制 # 写程序实现复制文件的功能 # 要求: # 1. 源文件路径和目标文件路径需要手动输入 # 2. 要考虑文件关闭的问题 # 3. 要考虑复制超大文件的问题 # 4. 要能复制二 ...