Java 10 线程局部握手:无需全局安全点的单线程暂停
JEP 312:线程局部握手
Java 10 引入 JVM 选项 -XX:+ThreadLocalHandshakes(仅 x64 与 SPARC 架构支持),允许 JVM 在不触发全局安全点的情况下,对单个应用线程执行回调操作。
核心机制
- 传统安全点:所有线程同步停顿,等待 VM 操作完成(如偏向锁撤销、类卸载、栈扫描)。
- 线程局部握手:VM 向目标线程发送握手请求,目标线程在安全点轮询点响应,执行回调,其他线程继续运行。
性能收益
- 减少全局安全点频率与持续时间,降低“Stop-the-World”影响。
- 提升高并发、大线程数应用的吞吐与尾延迟表现。
- 特别利于偏向锁撤销、线程本地存储清理等单线程操作。
平台支持与回退
- 支持:Linux/x64、Windows/x64、macOS/x64、Solaris/SPARC。
- 不支持平台自动回退至传统全局安全点机制,功能不受影响但无性能增益。
启用方式
java -XX:+ThreadLocalHandshakes YourApp
默认在支持平台上已启用(Java 10+),可用 -XX:-ThreadLocalHandshakes 关闭以排查兼容性问题。
java
- 理解 Java:JDK、JRE 和 JVM 详解
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 10 线程局部握手:无需全局安全点的单线程暂停