Max's Zone - 逃逸分析
type: channel
link: https://blog.maxxsoft.net/index.php/tag/%E9%80%83%E9%80%B8%E5%88%86%E6%9E%90/
items: JVM 里的逻辑漏洞，居然让你的哈希表慢了 20%！

JVM 里的逻辑漏洞，居然让你的哈希表慢了 20%！
type: item
date: 2025-04-02T17:48:00+08:00
description: 首先来看一段 Java 代码：int sumMapElements(ConcurrentHashMap<Integer, Integer> map) { int sum = 0; Enumeration<Integer> it = map.elements(); while (it.hasMoreElements()) { sum += (int) it.nextElement(); } return sum; }函数 sumMapElements 使用迭代器遍历了 ConcurrentHashMap 参数的所有元素，并求了它们的总和，将结果作为返回值返回。整个代码在实现上相当直观，也没什么弯弯绕绕。我敢说，如果让你来实现一个类似的操作，你十有八九也会写出差不多的代码——或者从不知道哪搜出来的二手 CSDN 文章里偷一段。作为一个非常基础的容器，ConcurrentHashMap 在并发场景里有着广泛的应用。成千上万日日夜夜里，这段代码的灵魂——也就是里面的那个迭代器，伴随着网卡缓冲区里的车水马龙，流淌在无数台跑着 Java 应用的服务器中。然而，当你用 OpenJDK 23 和 24，用默认的 G1 GC，分别运行同样的代码（需要 JMH），你会发现一个令人震撼的事实：23 居然比 24 慢了 20% 还多！[...]