SpringBoot3.0更新
一、 JDK17
2014年初发布JDK8,SpringBoot3.0以后不再支持JDK1.8
1)、JDK9新特性(2017年9月)
1、接口方法可以使用private来修饰
2、设置G1为JVM默认垃圾收集器
3、支持http2.0和websocket的API
重要特性:主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器
2)、JDK10新特性(2018年3月)
1、局部变量类型推断,类似JS可以通过var来修饰局部变量,编译之后会推断出值的真实类型
2、并行Full GC,来优化G1的延迟
3、允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程
重要特性:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间
3)、JDK11新特性(2018年9月)(LTS版本)
1、ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收)
2、Flight Recorder(飞行记录器),基于OS、JVM和JDK的事件产生的数据收集框架
3、对Stream、集合(List,Map,Set)API进行增强
字符串处理方法(判断字符串是否为空白、复制字符串、行数统计)
InputStream新增transferTo,可以用来将数据直接传输到OutputStream
引入的一个处理HTTP请求的的化化HTTP Client API,该API支持同步和异步,可以在java.net包中找到这个API。
重要特性:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器
4)、JDK12新特性(2019年3月)
1、switch 表达式语法扩展,可以有返回值
2、G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率
3、新增Shenandoah GC垃圾回收算法
通过交换 CPU 并发周期和空间以改善停顿时间,使得垃圾回收器执行线程能够在 Java 线程运行时进行堆压缩,并且标记和整理能够同时进行,解决内存收回实现低停顿的问题
重要特性:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法
5)、JDK13新特性(2019年9月)
1、Socket的底层实现优化,引入了NIO(异步I/O);
2、switch表达式增加yield关键字用于返回结果,作用类似于return,如果没有返回结果则使用break;
3、再次对ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统;
4、引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符;
重要特性:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO
6)、JDK14新特性(2020年3月)
1、instanceof类型匹配语法简化,可以直接给对象赋值,如if(obj instanceof String str),如果obj是字符串类型则直接赋值给了str变量;
2、NullPointerException打印优化,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;
7)、JDK15新特性(2020年9月)
1、隐藏类 hidden class;
2、密封类 sealed class,通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用;
8)、JDK16新特性(2021年3月)
1、ZGC性能优化
2、instanceof模式匹配
3、record关键字的引入
类似于枚举类型,可以向Lombok一样自动生成构造器、equals、getter等方法;
JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入
9)、JDK17新特性(2021年9月)(LTS版本)
1、正式引入密封类sealed class,限制抽象类的实现;
2、统一日志异步刷新,先将日志写入缓存,然后再异步刷新;
JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性,主要是对前几个版本的整合和完善。
二、 SpringBoot3.0更新
1、也修复了大量的 bug
2、将所有底层依赖项从 Java EE 迁移到了 Jakarta EE API
3、支持的 Spring 框架也变成了 Spring 6.0.2+
4、支持 GraalVM 原生镜像(2018 年发布的一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等特性)
5、删除以前不推荐的代码
6、RestTemplate最低要求HttpClient 5.x
7、仅标注@RequestMapping注解不再被扫描为Controller了,控制器只认@Controller注解了。
8、Swagger3.0(Swagger2于17年停止维护)