Java11新特性
Http Client标准化
Java11对Java9中引入并在Java10中进行了更新的Http Client API进行了标准化,在前两个版本中进行孵化的同时,Http Client几乎被完全重写,并且现在完全支持异步非阻塞。
并且,Java11中,Http Client的包名由jdk.incubator.http改为java.net.http,该API通过CompleteableFuture提供非阻塞请求和响应语义。使用起来也很简单,
1 | var request = HttpRequest.newBuilder() |
增强
Java11增加了一系列的字符串处理方法:
1 | //判断字符串是否为空 |
Optional增强
新增了empty()方法来判断指定的Optional对象是否为空
1 | var op = Optional.empty(); |
ZGC(可伸缩低延迟垃圾收集器)
ZGC即Z Garbage Collector,是一个可伸缩的、低延迟的垃圾收集器。
ZGC主要为了满足如下目标进行设计:
- GC停顿时间不超过10ms
- 技能处理几百MB的小堆,也能处理几个TB的大堆
- 应用吞吐能力不会下降超过15%
- 方便在此基础上引入新的GC特性和利用colored针以及Load barries优化奠定基础
- 只支持Linux/64位平台
与CMS中的ParNew和G1类似,ZGC也采用标记-复制算法,不过GZC对该算法做了重大改进。
在ZGC中出现Stop TheWorld的情况会更少。
Lamdba参数的局部变量语法
从Java10开始,便引入了局部变量类型推断这一关键特性。类型推断允许使用关键字var作为局部变量的类型而不是实际类型,编译器根据分配给变量的值推断出类型。
Java10中对var关键字存在几个限制
- 只能用于局部变量上
- 声明时必须初始化
- 不能用作方法参数
- 不能在Lamdba表达式中使用
Java11 开始允许开发者在Lamdba表达式中使用var进行参数声明。
1 | // 下面两者是等价的 |
启动单文件源代码程序
这意味着我们可以运行单一文件的Java源代码。此功能允许使用Java解释器直接执行Java源代码。源代码在内存中编译,然后由解释器执行,不需要在磁盘上生成.class文件了。唯一的约束在于所有相关的类必须定义在同一个Java文件中。
对于Java初学者并希望尝试简单程序的人特别有用,并且能和jshell一起使用。一定程度上增强了使用Java来写脚本程序的能力。
其他
- 新的垃圾回收器Epsilon:一个完全小及的GC实现,分配有限的内存资源,最大限度的降低内存占用和内存吞吐延迟时间。
- 低开销的Heap Profiling:Java11中提供一种低开销的Java堆分配采样方法,能够得到对分配的Java对象信息,并且能够通过JVM访问堆信息
- TLS1.3协议:Java11中包含了栓除安全性(TLS)1.3规范的实现,替换了之前版本中包含的TLS,包括TLS1.2,同时还改进了其他TLS功能,例如OCSP装订扩展,以及会话散列和扩展主密钥扩展,在安全性和新跟那个方面也做了很多提升
- 飞行记录器:飞行记录器之前是商业版JDK的一项分析工具,但在Java11中,其代码被包含到公开代码库中,这样所有人都能使用该功能了。
评论
