Skip to content

Latest commit

 

History

History
106 lines (60 loc) · 3.36 KB

Jdk新特性.md

File metadata and controls

106 lines (60 loc) · 3.36 KB

Jdk新特性

总结的不全,还请各位同学补充。

Jdk8新特性

  • Lambda / 方法引用

  • 接口新增default方法

  • Stream API

  • Optional API

  • 新的时间API(java.time强烈推荐使用)

  • 内置Base64工具

Jdk9新特性

PS: jdk9应该是继jdk8之后,又一个重要的版本,后续jdk的迭代,都是基于jdk9来完成的。

  • 模块化: 模块化是jdk9或者说jdk8之后最大的改进,在jdk8及以前,jvm启动时,需要加载非常多的不需要的外部扩展类库,导致程序消耗的内存非常大, 并且在打包后,应用的归档包也是比较庞大。但是在模块化系统中,jvm只需要加载每个模块需要的类库,这就大大减少了jvm的开销。模块化的好处 当然不止我所说的这些,其中奥妙,还请各位同学实践出真知。

  • 集合的工厂方法

  • try语句升级

  • 接口新增private方法

  • 响应式流(Doug Lea大师编写的,个人认为很重要,也是Webflux的基础)

  • JShell 交互式编程环境

  • String改为byte数组实现(记住这个特性)

PS: String类在jdk9后的每个版本,好像都会新增一些API,这个不再重复。

jdk10新特性

  • var类型推断: 这一功能在其他语言中早有实现,比如我接触过的c++的auto,js中的var(当然,js并不是强类型语言)。 其实我个人认为此特性意义不是特别重大,因为java本身就是强类型语言,var只能使用于局部变量推断。如果大量使用var, 反而可能造成代码可读性下降。

  • 集合工厂方法,使用集合工厂创建的集合是不可变的集合

  • 移除javah(在编写本地jni库时,需要javah生成c/c++头文件,javah被移除了,说明另有他法来解决这个问题)。

jdk10的特性还是有很多的,但是并没有像模块化这样大的改动。

jdk11新特性

  • java命令直接可以编译并运行java源文件

  • HttpClient: 长期以来,java类库之中只有一个HttpUrlConnection可以使用,且HttpUrlConnection使用起来较为麻烦。

  • Javascript引擎更换: Javascript引擎由Nashorn改为GraalVM。

  • String类新增了许多好用的API,如: strip,isBlank等。

jdk12新特性

  • switch语法糖

  • Unicode11支持

...

jdk13新特性

  • 文本块

  • Socket API被重新实现

Jdk14新特性

  • 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 - 掘金