Guillaume Nodet created CAMEL-23693:
---------------------------------------
Summary: camel-core - Optimize CaseInsensitiveMap hash function
for ASCII keys
Key: CAMEL-23693
URL: https://issues.apache.org/jira/browse/CAMEL-23693
Project: Camel
Issue Type: Improvement
Reporter: Guillaume Nodet
Fix For: 4.21.0
Optimize the CaseInsensitiveMap hash function and eliminate redundant hash
computations.
The initial O(1) hash table implementation (CAMEL-23691) used
Character.toLowerCase(Character.toUpperCase(c)) per character in the hash
function, which is expensive for the common case of ASCII header names.
Additionally, put() computed the hash 3 times (dedup + find + bucket insert)
and remove() computed it twice (find + unlink).
Changes:
- ASCII fast-path in hash function: simple c += 32 for A-Z instead of full
Unicode case fold per character
- Single-hash put(): compute hash once, reuse for deduplication, find, and
bucket insertion
- Single-hash remove(): inline chain walk with one hash computation
Benchmark results (18 typical headers, 2M iterations):
- put/get/containsKey/remove: 33.3M ops/s (was 9.0M, now 1.2x faster than
TreeMap)
- Exchange copy: 1.9M copies/s (was 490K, now 1.1x faster than TreeMap)
- Get-heavy lookups: 39.8M lookups/s (was 16.9M, now 1.7x faster than TreeMap)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)