01. JShell

jshell这个交互性工具,让Java也可以像脚本语言一样来运行,可以从控制台启动 jshell ,在 jshell 中直接输入表达式并查看其执行结果。当需要测试一个方法的运行效果,或是快速的对表达式进行求值时,jshell 都非常实用。快速jin'xi

java -version 查看java版本

jshell 进入shell

int n=20

System.out.println(n)

/help

 

02. 局部变量类型推断 (var ”关键字”)

 

var javastack = "javastack";

System.out.println(javastack);

局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,

var 语法 : 局部变量的类型推断.

注意点 :

1) var a; 这样不可以, 因为无法推断.

2) 类的属性的数据类型不可以使用var.

Java 10之前,你需要这样声明一个String对象。

使用var的好处是在使用lambda表达式时给参数加上注解

(@Deprecated var x, @Nullable var y) -> x.process(y);

 

03. 新加一些实用的API

1、Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。

2、Stream 加强

3、增加了一系列的字符串处理方法

4、Optional 加强

 

04. 移除的一些其他内容

移除项

移除了com.sun.awt.AWTUtilities

移除了sun.misc.Unsafe.defineClass,

使用java.lang.invoke.MethodHandles.Lookup.defineClass来替代

移除了Thread.destroy()以及 Thread.stop(Throwable)方法

移除了sun.nio.ch.disableSystemWideOverlappingFileLockCheck、sun.locale.formatasdefault属性

移除了jdk.snmp模块

移除了javafx,openjdk估计是从java10版本就移除了,oracle jdk10还尚未移除javafx,而java11版本则oracle的jdk版本也移除了javafx

移除了Java Mission Control,从JDK中移除之后,需要自己单独下载

移除了这些Root Certificates :Baltimore Cybertrust Code Signing CA,SECOM ,AOL and Swisscom

废弃项

-XX+AggressiveOpts选项

-XX:+UnlockCommercialFeatures

-XX:+LogCommercialFeatures选项也不再需要

 

05. 标准Java异步HTTP客户端 。

java 9 开始引入的一个处理 HTTP 请求的的 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。

 

06. 更简化的编译运行程序

 

增强java启动器支持运行单个java源代码文件的程序

// 编译

javac Javastack.java

// 运行

java Javastack

在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。

 

java Javastack.java

 

07. Unicode 10

Unicode 10 增加了8518个字符, 总计达到了136690个字符. 并且增加了4个脚本.同时还有56个新的emoji表情符号.

 

08. Remove the JavaEE and CORBA Moudles

在java11中移除了不太使用的JavaEE模块和CORBA技术

在java11中将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模块

 

09. Deprecate the Nashorn JavaScript Engine

废除Nashorn javascript引擎,在后续版本准备移除掉,有需要的可以考虑使用GraalVM

 

10. JEP : 336 : Deprecate the Pack200 Tools and API

废除了pack200以及unpack200工具以及java.util.jar中的Pack200 API。Pack200主要是用来压缩jar包的工具,不过由于网络下载速度的提升以及java9引入模块化系统之后不再依赖Pack200,因此这个版本将其移除掉。

 

11. 新的Epsilon垃圾收集器

A NoOp Garbage Collector

JDK上对这个特性的描述是: 开发一个处理内存分配但不实现任何实际内存回收机制的GC, 一旦可用堆内存用完, JVM就会退出.

如果有System.gc()调用, 实际上什么也不会发生(这种场景下和-XX:+DisableExplicitGC效果一样), 因为没有内存回收, 这个实现可能会警告用户尝试强制GC是徒劳.

 

用法 : -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

如果使用选项-XX:+UseEpsilonGC, 程序很快就因为堆空间不足而退出

 

主要用途如下 :

性能测试(它可以帮助过滤掉GC引起的性能假象)

内存压力测试(例如,知道测试用例 应该分配不超过1GB的内存, 我们可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有问题, 则程序会崩溃,说明有内存泄露)

非常短的JOB任务(对象这种任务, 接受GC清理堆那都是浪费空间)

VM接口测试

Last-drop 延迟&吞吐改进

 

12. ZGC, 这应该是JDK11最为瞩目的特性

GC暂停时间不会超过10ms

既能处理几百兆的小堆, 也能处理几个T的大堆(OMG)

和G1相比, 应用吞吐能力不会下降超过15%

为未来的GC功能和利用colord指针以及Load barriers优化奠定基础

初始只支持64位系统

用法 : -XX:+UnlockExperimentalVMOptions –XX:+UseZGC, 因为ZGC还处于实验阶段, 所以需要通过JVM参数来解锁这个特性

 

13. 支持G1上的并行完全垃圾收集

 

对于 G1 GC,相比于 JDK 8,升级到 JDK 11 即可免费享受到:并行的 Full GC,快速的 CardTable 扫描,自适应的堆占用比例调整(IHOP),在并发标记阶段的类型卸载等等。这些都是针对 G1 的不断增强,其中串行 Full GC 等甚至是曾经被广泛诟病的短板,你会发现 GC 配置和调优在 JDK11 中越来越方便。

 

14. JEP 332最新的HTTPS安全协议TLS 1.3

实现TLS协议1.3版本, TLS允许客户端和服务器端通过互联网以一种防止窃听, 篡改以及消息伪造的方式进行通信.

 

15. JEP 329 : 实现RFC7539中指定的ChaCha20和Poly1305两种加密算法, 代替RC4

 

16. Java Flight Recorder 源自飞机的黑盒子

jcmd  <pid> JFR.start

jcmd  <pid> JFR.dump filename=recording.jfr

jcmd  <pid> JFR.stop

 

jfr print --events CPULoad recording.jfr

 

jfr print --events GarbageCollection recording.jfr

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐