深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
88774 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

JDK 24 如何解决虚拟线程的同步绑定难题?

你好,我是郑雨迪。
Java 线程是 Java 程序执行的基本单位,相信大家对此并不陌生。JVM 允许应用程序同时运行多个线程,从而实现并发执行。
传统的 Java 线程依赖操作系统的原生线程,由操作系统负责调度和管理。这类线程的内存开销较大,单个线程的栈空间通常超过 1MB(可通过 -Xss 或 -XX:ThreadStackSize 进行调整,最小值为 1MB)。
例如,在 Web 服务器中,如果为每个请求创建一个 Java 线程,处理百万级别的请求将消耗超过 1TB 的内存用于栈空间,这在实际应用中难以承受。
因此,JVM 能够创建的线程数量受限,难以满足高并发场景的需求,与主流的异步编程模型存在一定冲突。

虚拟线程

JDK 21 的 Loom 项目 [1] 将传统的 Java 线程划分为虚拟线程(virtual thread)和平台线程(platform thread)。
平台线程本质上仍是原来的 Java 线程,同样与操作系统的原生线程一一映射,并且需要固定的大容量栈空间,因此 JVM 能够创建的平台线程数量十分有限。
相比之下,虚拟线程采用了可变栈空间的设计。对于调用层级较浅的简单任务,其栈空间占用极小。这一特性使得 JVM 能够同时创建大量的虚拟线程,从而支持 “一个任务一个线程” 的编程模型,提高并发能力。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. JDK 24 的 JEP 491 解决了虚拟线程在同步操作时被绑定到平台线程的问题,提升了系统的并发能力。 2. JEP 491 重新设计了 Java 的同步机制,使锁的所有权直接关联虚拟线程,而非平台线程,从根本上解决了虚拟线程与平台线程绑定的问题。 3. 虚拟线程的卸载不再受限于 Java 层面,JVM 可直接在虚拟机内部触发虚拟线程的卸载,进一步提升了虚拟线程的可扩展性。 4. 通过 JEP 491,虚拟线程在 synchronized 代码块内不再绑定到平台线程,有效避免了死锁和线程资源浪费的问题。 5. 未来,Loom 设计者将着手解决可能导致虚拟线程与平台线程绑定的问题,以进一步提升虚拟线程的可扩展性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部