Java 模块系统分裂包问题:JPMS 中的包冲突与模块路径解析
当多个模块导出同名包时,JPMS 会因分裂包而拒绝启动。本文以大型应用从类路径迁移到模块路径为场景,解释模块解析过程中包唯一性约束的由来,剖析导致分裂包的常见依赖结构,并给出通过模块描述符、构建工具及命令行选项诊断与修复问题的具体步骤。
共 8 篇文章
当多个模块导出同名包时,JPMS 会因分裂包而拒绝启动。本文以大型应用从类路径迁移到模块路径为场景,解释模块解析过程中包唯一性约束的由来,剖析导致分裂包的常见依赖结构,并给出通过模块描述符、构建工具及命令行选项诊断与修复问题的具体步骤。
本文分析偏向锁在 Java 15 中被默认禁用并最终移除的工程原因,聚焦高并发下撤销开销如何抵消收益。以线程池频繁争用的同步块性能诊断为贯穿场景,解释偏向锁的获取、撤销、批量重偏向与批量撤销流程,并结合 JEP 374 的决策依据,说明现代应用为何应避免依赖偏向锁,以及如何通过 JFR 和锁分析工具诊断同步性能。
本文聚焦 G1 GC 如何通过区域划分和记忆集实现并发标记与部分回收,核心问题是“在低延迟目标下,记忆集维护如何影响吞吐与内存开销”。以高并发订单服务为贯穿场景,分析记忆集数据结构、写屏障、SATB 算法及调优参数,并与 CMS 和 ZGC 对比,帮助读者根据堆大小和延迟目标选择 GC 策略。
本文通过一个 JSON 反序列化场景,演示如何结合 Java 的记录类与密封类构建代数数据类型,解决类型不安全和穷举性缺失的问题,同时降低对象拷贝与相等性比较的出错率。
本文深入解析 JDK Flight Recorder 的事件流 API 如何实现生产环境下的低开销实时监控。通过一个高并发交易服务的贯穿场景,阐述事件流的内部架构、关键事件类型、与 Prometheus 等外部系统的集成方式,以及锁竞争、内存分配等细节的采集原理。文章还对比了传统 JMX 监控的局限,并讨论虚拟线程下的 pinning 检测、背压控制等常见失败模式,为构建自定义预警提供工程指导。
本文追溯 Java 模式匹配从 JEP 394 到 JEP 441 的演进,以订单处理服务为场景,展示如何利用密封类型实现穷举性 switch,消除强制转型与 if-else 链,提升代码安全性与可读性。同时探讨其与数据导向编程的契合点、常见失败模式及适用边界。
深入剖析 OpenJDK 虚拟线程的调度机制,包括载体线程挂载与卸载、ForkJoinPool 工作窃取,以及同步代码协程化的工程方法,并讨论大规模虚拟线程下的公平性与适用边界。