目录
alibaba dragonwell jdk 的 Wisp2 特性
jdk 21 最大的功能是虚拟线程,是一种绿色线程(具体可以看周志明老师的书籍《深入理解java虚拟机》),目前 jvm 与操作系统的线程是一一对应的关系。
使用了虚拟线程可以减少资源消耗,减少操作系统上下文切换,不然的话多线程执行时操作系统会频繁在用户态与内核态之间切换,在多线程应用中具有重大意义。
之前的 openjdk loom 项目转正,成为 openjdk 的一部分。在 jvm 层面支持,不需要通过其他第三方的框架(quasar)来处理,降低了代码的侵入性。
https://github.com/openjdk/loom
虚拟线程介绍
https://zhuanlan.zhihu.com/p/648421339
JEP 425: Virtual Threads (Preview)
JEP 436: Virtual Threads (Second Preview)
在 openjdk 19 中作为预览特性,最终在 openjdk 21 中正式启用。
https://openjdk.org/projects/jdk/21/
在 2023.09.19 正式发布。
jdk 21 oracle 官方介绍
https://www.oracle.com/java/technologies/downloads/#java21
lts 支持到 2026年9月,除了 jdk 21,还有 3个lts版本,分别是 jdk 8、jdk 11、jdk17。
https://www.oracle.com/java/technologies/downloads/#java8
Java SE subscribers will receive JDK 8 updates until at least December 2030.
https://www.oracle.com/java/technologies/downloads/#java11
Java SE subscribers will receive JDK 11 updates until at least September 2026.
https://www.oracle.com/java/technologies/downloads/#java17
JDK 17 will receive updates under these terms, until September 2024, a year after the release of the next LTS.
jdk 8 的 lts 时间最长,到 2030年12月。
但是考虑到许可证的问题,一般部署jdk都使用的是 openjdk。
https://jdk.java.net/java-se-ri/21
spring 6.1 发布进度
https://spring.io/blog/2023/06/15/spring-framework-6-1-m1-released
https://spring.io/blog/2023/07/13/spring-framework-6-1-m2-released
https://spring.io/blog/2023/07/19/spring-framework-6-1-m3-released
https://spring.io/blog/2023/08/17/spring-framework-6-1-m4-released
https://spring.io/blog/2023/09/14/spring-framework-6-1-m5-released
https://spring.io/blog/2023/10/12/spring-framework-6-1-rc1-released
https://spring.io/blog/2023/10/26/spring-framework-6-1-rc2-released
https://spring.io/blog/2023/11/16/spring-framework-6-1-goes-ga
https://spring.io/blog/2023/11/23/spring-framework-6-1-1-available-now
https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions
spring boot 3.2 发布进度
https://spring.io/blog/2022/10/11/embracing-virtual-threads/
https://spring.io/blog/2023/07/20/spring-boot-3-2-0-m1-available-now
https://spring.io/blog/2023/08/24/spring-boot-3-2-0-m2-available-now
https://spring.io/blog/2023/09/21/spring-boot-3-2-0-m3-available-now
https://spring.io/blog/2023/10/20/spring-boot-3-2-0-rc1-available-now
https://spring.io/blog/2023/11/03/spring-boot-3-2-0-rc2-available-now
https://spring.io/blog/2023/11/21/this-week-in-spring-spring-boot-3-2-edition-november-21st-2023
https://spring.io/blog/2023/11/23/spring-boot-3-2-0-available-now
https://spring.io/blog/2023/11/23/spring-tips-spring-boot-3-2
由 spring-boot-dependencies-3.2.0 得知,spring boot 3.2.0 默认使用了 sprinig 6.1.1。
https://github.com/spring-projects/spring-boot/wiki/
https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x
现在 spring 官方一直在发布 milestone 版本,过了不久就会发布正式的 spring 6.1 版本相关的组件。spring boot 3.2 开始支持 spring 6.1 相关组件。
最终在 2023.11.23 发布 spring 6.1 和 spring boot 3.2。
由官网得知,在 2023.12.06 发布了与 spring boot 3.2 对应的版本匹配的 spring cloud 2023.0.x。
https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2023.0-Release-Notes
openjdk最小版本 | spring 最小版本 | spring boot 最小版本 | spring cloud 最小版本 |
21 | 6.1 | 3.2 | 2023.0.x |
看国内的情况,jdk 21的使用需要一段时间,目前 jdk 8 还是主流,目前因为开源组件安全漏洞扫描需要升级到 spring boot 3.x,但是spring官方使用了jdk17进行代码编译,所以使用jdk 版本最低是 17,这就会面临一个代码修改的问题,例如代码中引用了 servlet相关api。
对于开源软件升级问题,除非是追求性能以及大型互联网公司会升级使用里面的功能,升级过程不可避免会有代码修改以及其他的问题,对于这些问题一般是程序能正常运行代码能不动就不动。
如果是新项目可以直接使用 openjdk 21。
其他实现
alibaba dragonwell jdk 的 Wisp2 特性
https://github.com/dragonwell-project/dragonwell8/wiki/Wisp%E6%96%87%E6%A1%A3
在 jvm 层面实现,无需修改现有的代码,仅支持Linux操作系统。
https://github.com/dragonwell-project/dragonwell8/issues/113
自己整理的文章
https://blog.csdn.net/zlpzlpzyd/article/details/133536261
TencentKona
https://github.com/Tencent/TencentKona-8/wiki/%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C
https://github.com/Tencent/TencentKona-8/wiki/KonaFiber%E7%94%A8%E6%88%B7%E6%96%87%E6%A1%A3-292
在 api 层面实现,需要修改代码,通过参数 -XX:+/-UseKonaFiber控制打开、关闭协程功能(默认打开)