跳到主要内容

JEP 232:提升安全应用性能

QWen Max 中英对照

概述

改进安装了安全管理员后运行的应用程序的性能。

目标

更好地了解性能问题,并实施经验证可以提高性能的增强功能。将创建子任务来评估和跟踪每个潜在的改进。

非目标

提升性能是一个理想的结果,但此 JEP 并不会承诺任何具体的性能提升指标。

动机

许多使用 Java SE、Java EE 以及相关技术的开发者都提出了希望提升在启用安全管理器的情况下运行应用程序的性能。尽管具体数字尚未确认,并且可能因多种因素而有所不同,但已知在启用安全管理器的情况下运行 Java 应用程序可能会导致性能下降 10%-15%。虽然某些性能损失是不可避免的,但缩小这一性能差距无论对性能还是安全性都有好处。

描述

我们探索并实现了一些优化和增强措施,以改善安装了安全管理器后运行的应用程序的性能。其中一些优化提升了性能,而另一些则没有明显效果。还有一些优化显示出潜力,但由于各种原因不会作为此 JEP(JDK 增强提案)的一部分被集成。对于每一个被考虑的优化,如果之前没有相关问题记录,则新开了 JBS(Java Bug System)问题,并使用 JMH 创建了微基准测试。

优化

基于测试和社区反馈,我们改进性能的主要关注点在于安全策略的执行和权限评估。权限类和默认的 JDK 策略实现被设计为线程安全的。然而,多线程性能测试表明,这些类是一个热点(性能瓶颈)。我们实施了多项改进措施以提高吞吐量并减少线程争用:

我们还在另外两个关键领域改进了性能:

  • 我们更改了 java.security.CodeSourcehashCode 方法,通过使用代码源 URL 的字符串形式来计算哈希码,从而避免了潜在的昂贵 DNS 查询。更多信息请参见 JDK-6826789

  • 我们增强了 java.lang.SecurityManagercheckPackageAccess 方法的包检查算法。更多信息请参见 JDK-8072692

测试

在应用每个潜在优化之前和之后,需要进行测试以衡量性能。为了确保适当的代码覆盖率并反映不同类型的用例,可能需要实施多个测试。我们将使用性能分析工具来帮助识别潜在的优化领域。此外,我们还将运行 SPECjEnterprise 基准测试,以衡量优化对 Java EE 应用程序的性能影响。

最后,将对所有受支持的 JDK 平台进行优化测量,以确保结果始终是积极的。