总结的不全,还请各位同学补充。
-
Lambda / 方法引用
-
接口新增default方法
-
Stream API
-
Optional API
-
新的时间API(java.time强烈推荐使用)
-
内置Base64工具
PS: jdk9应该是继jdk8之后,又一个重要的版本,后续jdk的迭代,都是基于jdk9来完成的。
-
模块化: 模块化是jdk9或者说jdk8之后最大的改进,在jdk8及以前,jvm启动时,需要加载非常多的不需要的外部扩展类库,导致程序消耗的内存非常大, 并且在打包后,应用的归档包也是比较庞大。但是在模块化系统中,jvm只需要加载每个模块需要的类库,这就大大减少了jvm的开销。模块化的好处 当然不止我所说的这些,其中奥妙,还请各位同学实践出真知。
-
集合的工厂方法
-
try语句升级
-
接口新增private方法
-
响应式流(Doug Lea大师编写的,个人认为很重要,也是Webflux的基础)
-
JShell 交互式编程环境
-
String改为byte数组实现(记住这个特性)
PS: String类在jdk9后的每个版本,好像都会新增一些API,这个不再重复。
-
var类型推断: 这一功能在其他语言中早有实现,比如我接触过的c++的auto,js中的var(当然,js并不是强类型语言)。 其实我个人认为此特性意义不是特别重大,因为java本身就是强类型语言,var只能使用于局部变量推断。如果大量使用var, 反而可能造成代码可读性下降。
-
集合工厂方法,使用集合工厂创建的集合是不可变的集合
-
移除javah(在编写本地jni库时,需要javah生成c/c++头文件,javah被移除了,说明另有他法来解决这个问题)。
jdk10的特性还是有很多的,但是并没有像模块化这样大的改动。
-
java命令直接可以编译并运行java源文件
-
HttpClient: 长期以来,java类库之中只有一个HttpUrlConnection可以使用,且HttpUrlConnection使用起来较为麻烦。
-
Javascript引擎更换: Javascript引擎由Nashorn改为GraalVM。
-
String类新增了许多好用的API,如: strip,isBlank等。
-
switch语法糖
-
Unicode11支持
...
-
文本块
-
Socket API被重新实现
-
instanceof 模式匹配
-
Record结构(实用)
-
CMS收集器被删除了。
-
Parallel Scavenge 和 Serial Old这对组合被弃用了。(我觉着也是,本来Parallel Scavenge和Parallel Old, Serial和Serial Old这两对收集器各自搭配的挺好,Parallel Scavenge非要脚踏两只船)
展望: ZGC是11中引入的一款新的垃圾回收器。G1收集器本身已经很高效了,但是停顿时间这一块缺陷是所有收集器的缺点, 而ZGC不仅对停顿时间这个缺点做了大量优化,也提供了非常多当高级功能。 似乎ZGC的到来,是要主宰Java GC的未来了。。。
关于ZGC可以参考这篇文章: ZGC - 掘金