ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JDK8到JDK17各个版本的重要特性整理

2022-03-03 12:31:06  阅读:255  来源: 互联网

标签:G1 JDK17 特性 API GC 版本 JDK8 引入 线程


JDK8到JDK17各个版本的重要特性整理

 

JDK8新特性(2014年初)(LTS版本)

1、Lambda表达式

2、函数式编程

3、接口可以添加默认方法和静态方法,也就是定义不需要实现类实现的方法

4、方法引用

5、重复注解,同一个注解可以使用多次

6、引入Optional来避免空指针

7、引入Streams相关的API

8、引入新的Date/Time相关的API

9、新增jdeps命令行,来分析类、目录、jar包的类依赖层级关系

10、JVM使用MetaSpace代替了永久代(PermGen Space)

重要特性:Lambda表达式、函数式接口、方法引用、Stream流式API、采用MetaSpace代替了永久代(PermGen Space)

JDK9新特性(2017年9月)

1、接口方法可以使用private来修饰

2、设置G1为JVM默认垃圾收集器

3、支持http2.0和websocket的API

重要特性:主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器

JDK10新特性(2018年3月)

1、局部变量类型推断,类似JS可以通过var来修饰局部变量,编译之后会推断出值的真实类型

2、并行Full GC,来优化G1的延迟

3、允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程

重要特性:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间

JDK11新特性(2018年9月)(LTS版本)

1、ZGC,ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收)

2、Flight Recorder(飞行记录器),基于OS、JVM和JDK的事件产生的数据收集框架

3、对Stream、Optional、集合API进行增强

重要特性:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器

JDK12新特性(2019年3月)

1、Shenandoah GC,新增的GC算法

2、switch 表达式语法扩展,可以有返回值

3、G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率

重要特性:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法

JDK13新特性(2019年9月)

1、Socket的底层实现优化,引入了NIO;

2、switch表达式增加yield关键字用于返回结果,作用类似于return,如果没有返回结果则使用break;

3、ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统;

4、引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符;

重要特性:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO

JDK14新特性(2020年3月)

1、instanceof类型匹配语法简化,可以直接给对象赋值,如if(obj instanceof String str),如果obj是字符串类型则直接赋值给了str变量;

2、引入record类,类似于枚举类型,可以向Lombok一样自动生成构造器、equals、getter等方法;

3、NullPointerException打印优化,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;

JDK15新特性(2020年9月)

1、隐藏类 hidden class;

2、密封类 sealed class,通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用;

JDK16新特性(2021年3月)

1、ZGC性能优化

2、instanceof模式匹配

3、record的引入

JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入

JDK17新特性(2021年9月)(LTS版本)

 1、正式引入密封类sealed class,限制抽象类的实现;

2、统一日志异步刷新,先将日志写入缓存,然后再异步刷新;

虽然JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性,主要是对前几个版本的整合和完善

 

标签:G1,JDK17,特性,API,GC,版本,JDK8,引入,线程
来源: https://www.cnblogs.com/ios9/p/15959212.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有