Java开发工具包(JDK)26是Java标准版的计划更新,预定于2026年3月17日发布,目前已进入初始阶段的Bug修复阶段,功能特性已冻结。以下10个功能正式面向JDK 26:模式、instanceof和switch中原始类型的第四次预览,提前时对象缓存,Vector API的第十一次孵化,惰性常量和密码学对象PEM编码的第二次预览,结构化并发的第六次预览,关于使用深度反射修改final字段的警告,通过减少G1垃圾收集器中的同步来提高吞吐量,客户端API的HTTP/3支持,以及移除Java Applet API。
作为Java的短期发布版本,JDK 26由六个月的Premier级支持提供支持,它继承了9月16日发布的JDK 25,后者是一个长期支持(LTS)版本,由数年的Premier级支持提供支持。JDK 26的早期访问构建版本可在https://jdk.java.net/26/获取。
最新添加的功能是模式、instanceof和switch中的原始类型,旨在通过允许在所有模式上下文中使用原始类型来增强模式匹配,并扩展instanceof和switch以适用于所有原始类型。现在进入第四次预览,该功能此前已在JDK 23、JDK 24和JDK 25中进行过预览。目标包括允许对所有类型使用类型模式来实现统一的数据探索,将类型模式与instanceof对齐,将instanceof与安全转换对齐,并允许模式匹配在嵌套和顶级模式上下文中使用原始类型。第四次预览中的更改包括增强无条件准确性的定义,并在switch构造中应用更严格的支配检查。这些更改使编译器能够识别更广泛的编码错误。
通过提前时对象缓存,HotSpot JVM将获得改进的启动和预热时间,因此可以与任何垃圾收集器一起使用,包括低延迟的Z垃圾收集器(ZGC)。这将通过使得可以从中性的、与GC无关的格式将缓存的Java对象按顺序加载到内存中来实现,而不是以GC特定格式直接将它们映射到内存中。该功能的目标包括允许所有垃圾收集器与Project Leyden引入的AOT(提前时)缓存平滑协作,将AOT缓存与GC实现细节分离,并确保使用AOT缓存相对于以前的版本不会对启动时间产生实质影响。
Vector API的第十一次孵化引入了一个API来表达矢量计算,在运行时可靠地编译为支持CPU上的最优矢量指令。这实现了优于等效标量计算的性能。孵化中的Vector API可追溯到2021年3月到达的JDK 16。该API旨在清晰简洁,与平台无关,在x64和AArch64 CPU上具有可靠的编译和性能,并提供优雅的降级。Vector API的长期目标是利用Project Valhalla对Java对象模型的增强。
JDK 26的议程中还包括惰性常量API的另一次预览,该API曾在JDK 25中通过稳定值能力进行过预览。惰性常量是保存不可修改数据并被JVM视为真正常量的对象,使得能够实现与声明字段为final相同的性能优化。惰性常量在初始化时机方面提供了更大的灵活性。
PEM编码的第二次预览要求为编码表示密码学密钥、证书和证书撤销列表的对象到PEM传输格式,以及从该格式解码回对象的API。PEM API在JDK 25中被提议作为预览功能。第二次预览包含许多更改,例如PEMRecord类现在被命名为PEM,现在包含一个返回解码的Base64内容的decode()方法。此外,EncryptedPrivateKeyInfo类的encryptKey方法现在被命名为encrypt,现在接受DEREncodable对象而不是PrivateKey对象,从而能够加密KeyPair和PKCS8EncodedKeySpec对象。
结构化并发API通过将在不同线程中运行的相关任务组作为单个工作单元来简化并发编程,从而简化错误处理和取消,提高可靠性,并增强可观察性。目标包括推广一种可以消除由取消和关闭引起的常见风险(如线程泄漏和取消延迟)的并发编程风格,并改善并发代码的可观察性。
关于使用深度反射修改final字段的新警告旨在为开发者准备未来的发布版本,该版本将通过限制final字段修改来确保默认完整性,换句话说,使final真正意味着final,这将使Java程序更安全且可能更快。应用程序开发者可以通过在必要时选择性地启用修改final字段的能力来避免当前的警告和未来的限制。
G1 GC提案旨在通过减少应用程序线程和GC线程之间所需的同步量来改善使用G1垃圾收集器时的应用程序吞吐量和延迟。目标包括减少G1垃圾收集器的同步开销,减少G1写屏障的注入代码大小,并保持G1的整体架构,不改变用户交互。
G1 GC提案指出,尽管G1作为HotSpot JVM的默认垃圾收集器,设计用于平衡延迟和吞吐量,但实现这种平衡有时会相对于面向吞吐量的垃圾收集器(如Parallel和Serial收集器)对应用程序性能产生负面影响:
相对于Parallel,G1与应用程序更多地并发执行其工作,减少了GC暂停的持续时间,从而改善了延迟。不可避免地,这意味着应用程序线程必须与GC线程共享CPU并与其协调。这种同步既降低了吞吐量又增加了延迟。
HTTP/3提案要求允许Java库和应用程序以最小的代码更改与HTTP/3服务器交互。目标包括更新HTTP客户端API以发送和接收HTTP/3请求和响应;只需要对HTTP客户端API和Java应用程序代码进行轻微更改;以及允许开发者选择性地使用HTTP/3,而不是将默认协议版本从HTTP/2更改为HTTP/3。
HTTP/3被认为是用于网络的HTTP(超文本传输协议)数据通信协议的主要版本。版本3建立在IETF QUIC(快速UDP互联网连接)传输协议上,该协议在其能力中强调流控制流、低延迟连接建立、网络路径迁移和安全性。
移除现在被认为已过时的Java Applet API也是JDK 26的目标。Applet API在2021年的JDK 17中被弃用以进行移除。根据提案,该API已过时,因为最近的JDK发布版本和当前的网络浏览器都不支持applet。提案指出,没有理由保留未使用且不可用的API。
Q&A
Q1:JDK 26什么时候发布?它有哪些主要新功能?
A:JDK 26预定于2026年3月17日发布,包含10个主要新功能:原始类型模式匹配的第四次预览、提前时对象缓存、Vector API第十一次孵化、惰性常量和PEM编码的第二次预览、结构化并发第六次预览、deep reflection警告、G1 GC性能优化、HTTP/3支持,以及移除Java Applet API。
Q2:G1垃圾收集器的改进能带来什么好处?
A:G1垃圾收集器的改进主要通过减少应用程序线程和GC线程之间的同步量来提高应用程序吞吐量和降低延迟。改进包括减少同步开销、缩小写屏障注入代码大小,同时保持G1的整体架构不变,让应用程序在垃圾收集时获得更好的性能表现。
Q3:为什么要移除Java Applet API?
A:Java Applet API在JDK 26中被移除是因为它已经完全过时。该API在2021年的JDK 17中就被标记为弃用,因为最新的JDK版本和现代网络浏览器都不再支持applet技术,保留这个未使用且不可用的API没有意义。
好文章,需要你的鼓励
清华团队开发DKT模型,利用视频扩散AI技术成功解决透明物体深度估计难题。该研究创建了首个透明物体视频数据集TransPhy3D,通过改造预训练视频生成模型,实现了准确的透明物体深度和法向量估计。在机器人抓取实验中,DKT将成功率提升至73%,为智能系统处理复杂视觉场景开辟新路径。
R语言在Tiobe 12月编程语言流行度指数中重返前十,排名第10位,占比1.96%。作为统计计算专用语言,R语言凭借在统计分析和大规模数据可视化方面的优势重新获得关注。尽管传统软件工程师对其语法和扩展性存在质疑,但R语言在大学和研究驱动行业中仍表现出色,在快速实验、统计建模和探索性数据分析领域具有独特优势。
字节跳动研究团队提出了专家-路由器耦合损失方法,解决混合专家模型中路由器无法准确理解专家能力的问题。该方法通过让每个专家对其代表性任务产生最强响应,同时确保代表性任务在对应专家处获得最佳处理,建立了专家与路由器的紧密联系。实验表明该方法显著提升了从30亿到150亿参数模型的性能,训练开销仅增加0.2%-0.8%,为混合专家模型优化提供了高效实用的解决方案。