jdk8升级到jdk17

jdk8新特性:
1、lambda表达式
2、引入了stream api
3、函数式接口
4、方法引用 ::
5、hashmap实现的增强
6、Optional类
7、对时间、日期的优化,新增了LocalDate、LocalTime、LocalDateTime,打印输入时比date友好。
5、并发增强:JDK 8对并发编程进行了增强。它引入了一些新的并发工具和类,使得并发编程更加容易和有效。其中包括CompletableFuture类、StampedLock类、并行数组等。这些增强使得开发人员能够更好地处理并发问题,提高程序的性能和可伸缩性。

jdk17新特性:
1、switch表达式

int num = 5;
int square = switch (num) {
    case 1, 2, 3 -> num;
    default -> num * num;
};
System.out.println(square);

2、ZGC
JDK 17 中对 ZGC(可伸缩的低延迟垃圾回收器)进行了一些改进,其中包括了针对 MappedByteBuffer 和堆外内存的改进,使得它们可以更快地进行垃圾回收,提高了应用程序的性能。

3 JDK 17 中引入了一个统一的 JVM 日志系统,它可以在运行时收集并记录 JVM 和应用程序的日志信息,并支持按时间戳、等级和线程 ID 等进行筛选和过滤,以帮助开发人员更轻松地调试和分析应用程序的运行情况。

4、空指针会报出具体的对象

5、引入文本块
三个引号

// jdk1.8的写法
String html = "<html>\n" +
            "   <head>\n" +
            "       <title>test</title>\n" +
            "   </head>\n" +
            "   <body>\n" +
            "       <h1>test</h1>\n" +
            "   </body>\n" +
            "  </html>\n";
// jdk13的写法
var jdk15Html = """
                <html>
                    <body>
                        <p>hello, world</p>
                    </body>
                </html>
                """;

6、封闭类

Sealed Classes(封闭类)

// 测试代码
public sealed class Car permits MiniCar, SmallCar, Bigcar{
    ...
}
// 以下代码可以正常运行
public final class MiniCar extends Car {...}
// 以下代码会报错
public final class Train extends Car {...}

7、Record类型
record 是 JDK 14 引入的关键字,用于声明不可变的数据类。它适用于存储纯粹的值类型数据.编译后的字节码被final修饰且继承Record类,所有属性也都被final修饰。
可以直接获取属性,point.x(),不能set
使用:
public record point(int x,int y){

8、instanceof类型判断再也不需要强制转换
原:
if(obj instanceOf String){
String str = (String) obj;}

现在:
if(obj instance String str){}

在instanceOf的同时将obj强制转换并赋值给str。

为什么要升级到jdk17

最简单的理由就是,springboot3.0放弃了jdk8,kafka4.0同样放弃了jdk8

其次是垃圾回收器的效率都提升了,最大的亮点是带来了稳定版的ZGC垃圾回收器,达到亚毫秒级停顿。

1、ZGC垃圾回收器从实验性功能更改为正式产品功能,从JDK11引入以来,经过持续的迭代升级,目前已经足够稳定。需要手动开启,开启方式:-XX:+UseZGC
2、G1垃圾回收器仍然作为默认垃圾回收器,进行改进升级,主要包括可中止的混合收集集合、NUMA 可识别内存分配等
3、JDK14开始删除CMS垃圾回收器
4、JDK14开始弃用 ParallelScavenge 和 SerialOld GC 的组合使用

升级时,将springBoot升级到2.7.14, Spring升级到5.3.29

升级过程中出现的问题:
主要是一些找不到类的问题,
1、在编译时会找不到相关的类。这是因为 Java EE 已经在 Java 9 中被标记为 deprecated,Java 11 中被正式移除,可以手动引入 javax 的包
2、lombok找不到找不到包,升级一下版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值