面试官问我Java9~14的有哪些重要的新特性,我哭了~~~( 二 )
var 关键字
- 介绍 :提供了 var 关键字声明局部变量:var list = new ArrayList(); // ArrayList
- 局限性 :只能用于带有构造器的局部变量和 for 循环中
不可变集合list , set , map 提供了静态方法copyOf()返回入参集合的一个不可变拷贝(以下为 JDK 的源码)
static List copyOf(Collection extends E> coll) {return ImmutableCollections.listCopy(coll);}
java.util.stream.Collectors中新增了静态方法 , 用于将流中的元素收集为不可变的集合Optional
- 新增了orElseThrow()方法来在没有值时抛出异常
为了最大限度地减少 Full GC 造成的应用停顿的影响 , 从 Java10 开始 , G1 的 FullGC 改为并行的标记清除算法 , 同时会使用与年轻代回收和混合回收相同的并行工作线程数量 , 从而减少了 Full GC 的发生 , 以带来更好的性能提升、更大的吞吐量 。
应用程序类数据共享在 Java 5 中就已经引入了类数据共享机制 (Class Data Sharing , 简称 CDS) , 允许将一组类预处理为共享归档文件 , 以便在运行时能够进行内存映射以减少 Java 程序的启动时间 , 当多个 Java 虚拟机(JVM)共享相同的归档文件时 , 还可以减少动态内存的占用量 , 同时减少多个虚拟机在同一个物理或虚拟的机器上运行时的资源占用
Java 10 在现有的 CDS 功能基础上再次拓展 , 以允许应用类放置在共享存档中 。 CDS 特性在原来的 bootstrap 类基础之上 , 扩展加入了应用类的 CDS (Application Class-Data Sharing) 支持 。 其原理为:在启动时记录加载类的过程 , 写入到文本文件中 , 再次启动时直接读取此启动文本并加载 。 设想如果应用环境没有大的变化 , 启动速度就会得到提升
其他特性
- 线程-局部管控:Java 10 中线程管控引入 JVM 安全点的概念 , 将允许在不运行全局 JVM 安全点的情况下实现线程回调 , 由线程本身或者 JVM 线程来执行 , 同时保持线程处于阻塞状态 , 这种方式使得停止单个线程变成可能 , 而不是只能启用或停止所有线程
- 备用存储装置上的堆分配:Java 10 中将使得 JVM 能够使用适用于不同类型的存储机制的堆 , 在可选内存设备上进行堆内存分配
- 统一的垃圾回收接口:Java 10 中 , hotspot/gc 代码实现方面 , 引入一个干净的 GC 接口 , 改进不同 GC 源代码的隔离性 , 多个 GC 之间共享的实现细节代码应该存在于辅助类中 。 统一垃圾回收接口的主要原因是:让垃圾回收器(GC)这部分代码更加整洁 , 便于新人上手开发 , 便于后续排查相关问题 。
推荐阅读
- Java学习:Java学习到什么程度可以进行面试
- 程序员面试金典17.05_go_字母与数字
- 安卓春招面经:二本渣院面试网易被拒,最终获腾讯阿里offer
- 「6」进大厂必须掌握的面试题-Hibernate
- 震惊!京东T4大佬面试整整三个月,才写了两份java面试笔记
- 安卓面试必备的JVM虚拟机制详解,看完之后简历上多一个技能
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
- 「3」Java面试-Servlet
- 大数据hbase面试宝典(三)
- 北大英华大数据面试题