张三求职日记--面试题篇--Java新特性

34 阅读2分钟

张三求职日记--面试题篇--Java新特性封面图.jpg java9-21的令人印象深刻的新特性

虚拟线程(JDK21)

类似于其他语言中的协程,可以理解是一种轻量级的线程。
传统的线程由操作系统管理,而虚拟线程由java虚拟机管理,相比之下,虚拟线程的消耗比传统线程小的多。
虚拟线程在线程切换耗时、内存使用、可创建线程数量上都有巨大提升,理论上在I/O密集型任务应使用虚拟线程来替代传统线程。
而在CPU密集型任务中,并不需要创建那么多的线程也没有那么大的消耗,如果历史代码中有较多的同步操作以及ThreadLocal,需要权衡一下切换的代价。

ZGC(JDK11开始,后续一直在进化)

ZGC作为G1之后的新一代收集器,出现于JDK11,并且在之后的版本几乎一直有更新。
ZGC的特点是停顿时间短且支持超大堆(16TB)。
ZGC通过染色指针的技术用三色标记来实现并发的GC操作,通过读屏障确保并发标记的正确性,通过多视图内存映射避免内存冲突。
相对来说,在较新的JDK版本,如果追求稳定性可以使用G1收集器,在需要低延迟,有超大堆的场景可以选择ZGC。个人认为根据JDK的更新规律和频次来看,在JDK17之后的版本大胆选择ZGC吧。

文本块(JDK15)

说来也怪,JDK在JDK15版本才引入了其他语言早就有的文本块功能,使用三引号(''')来实现,解决了JAVA语言存放大段带换行的变量使用难受的问题。

swith支持lambda(JDK14)

switch支持lambda后大大减少了switch语句所需要的代码,可以突出重要逻辑,感觉上是一个非常有利于编码的改动。

新的NullPointerExceptions提示(JDK14)

在JDK的更新中,把让人烦躁的NullPointerExceptions的异常提示进行了增强,现在如果出现空指针异常后,报错能精确的告诉我们一连串对象中是哪个对象空了,省去了繁琐的定位过程。