主要观点:在 JDK 25 中改进了String
类的性能,使String::hashCode
函数大多可常量折叠,对使用String
作键的静态不可变Map
性能提升显著。
关键信息:
- 通过改进,
String::hashCode
首次调用时计算哈希码并存储在私有字段String.hash
中,后续调用变快。 @Stable
注解告知虚拟机可读取字段一次且信任其不再改变,从而实现常量折叠,提升性能。- 改进可使包含
String
键的不可变Map
及相关操作性能大幅提升,如通过Map
查找MethodHandle
调用native
方法。 - 存在特殊情况,若
String
哈希码为 0 则常量折叠不生效,未来有望修复。 @Stable
注解仅适用于内部 JDK 代码,正在开发新 JEP 让用户代码间接受益。
重要细节:- 示例中展示了维护不可变
Map
并利用改进后的性能,如通过SYSTEM_CALLS.get(“malloc”).invokeExact(16L)
分配和释放内存。 - 基准测试显示 JDK 24 和 JDK 25 中
StringHashCodeStatic.nonZero
的性能差异巨大,从 4.632ns/op 降至 0.571ns/op。 - 解释了
@Stable
注解如何使虚拟机能对整个操作链进行常量折叠,直接调用native
方法提升性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。