JDK10新特性

Java 10 发布于 2018 年 3 月 20 日,最知名的特性应该是 var 关键字(局部变量类型推断)的引入了,其他还有垃圾收集器改善、GC 改进、性能提升、线程管控等一批新特性。

1. 局部变量类型推断(JEP 286)

这是JDK 10最显著的新特性,允许在局部变量声明时使用var关键字推断其类型。

var list = new ArrayList<String>();
list.add("Hello");
list.add("World");
for (var item : list) {
    System.out.println(item);
}

2.备用内存设备上的堆分配(JEP 316)

允许HotSpot VM在非默认内存设备上分配Java对象堆。

3. 单个源码仓库(JEP 296)

将JDK源代码库从多个存储库合并为单个存储库,简化了开发和构建过程。

5. 根据需要编译的类进行编译(JEP 295)

这个特性让JIT编译器更加智能,仅编译真正运行中的“热点”代码。

6. 垃圾收集器接口(JEP 304)

引入了一个清理接口,标准化垃圾收集器的实现,使得替代GC实现更容易集成。

7. 线程本地握手(JEP 313)

这个特性允许在不修改线程代码的情况下,向线程发送操作请求,例如请求线程在某个点上执行回调函数。

8.G1 并行 Full GC

从 Java9 开始 G1 就了默认的垃圾回收器,G1 是以一种低延时的垃圾回收器来设计的,旨在避免进行 Full GC,但是 Java9 的 G1 的 FullGC 依然是使用单线程去完成标记清除算法,这可能会导致垃圾回收期在无法回收内存的时候触发 Full GC。

为了最大限度地减少 Full GC 造成的应用停顿的影响,从 Java10 开始,G1 的 FullGC 改为并行的标记清除算法,同时会使用与年轻代回收和混合回收相同的并行工作线程数量,从而减少了 Full GC 的发生,以带来更好的性能提升、更大的吞吐量。