dependabot[bot] opened a new pull request, #20894: URL: https://github.com/apache/camel/pull/20894
Bumps [com.cedarsoftware:java-util](https://github.com/jdereg/java-util) from 4.81.0 to 4.83.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jdereg/java-util/blob/master/changelog.md">com.cedarsoftware:java-util's changelog</a>.</em></p> <blockquote> <h4>4.83.0 - 2025-01-18</h4> <ul> <li><strong>PERFORMANCE</strong>: <code>LRUCache</code> (THREADED strategy) - Major performance improvements reducing overhead from ~5x to ~1.4x vs ConcurrentHashMap <ul> <li>Replaced <code>System.nanoTime()</code> with logical clock (AtomicLong counter) for LRU ordering - ~5ns vs ~25ns per operation</li> <li>Simplified probabilistic timestamp updates using timestamp low bits - eliminates atomic/ThreadLocal operations on most accesses</li> <li>Removed extra <code>get()</code> call in <code>put()</code> since Node creation is now cheap with logical clock</li> <li>Added amortized eviction (batch every 16 inserts) to spread eviction cost across operations</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>LRUCache</code> - Fixed hard cap enforcement to guarantee memory bounds under high-throughput scenarios <ul> <li>Split eviction into <code>tryEvict()</code> (skippable) and <code>forceEvict()</code> (blocks until complete)</li> <li>Hard cap (2x capacity) now uses <code>LockSupport.parkNanos(1000)</code> for efficient spinning with low CPU usage</li> <li>Fixes issue where rapid inserts could exceed memory bounds when eviction couldn't keep up</li> </ul> </li> <li><strong>CHANGE</strong>: <code>CaseInsensitiveMap</code> - Default cache changed from <code>ConcurrentHashMap</code> to <code>LRUCache</code> (THREADED strategy) <ul> <li>Provides true LRU eviction (hot entries preserved) vs random eviction with ConcurrentHashMap</li> <li>Guarantees bounded memory (max 2x capacity) vs loose bounds with ConcurrentHashMap</li> <li>Performance is equivalent or better in benchmarks</li> <li>Users can still use <code>replaceCache()</code> to configure ConcurrentHashMap if desired</li> </ul> </li> </ul> <h4>4.82.0 - 2025-01-17</h4> <ul> <li><strong>BUG FIX</strong>: <code>TypeUtilities</code> - Fixed WildcardType bounds array mutation bug <ul> <li>External <code>WildcardType</code> implementations return internal arrays from <code>getUpperBounds()</code>/<code>getLowerBounds()</code></li> <li>These arrays were being modified in-place during resolution, corrupting the original type</li> <li>Fix: Clone arrays from external implementations before modification; skip cloning for internal <code>WildcardTypeImpl</code></li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TypeUtilities</code> - Fixed unsafe cast for method-level TypeVariables <ul> <li><code>TypeVariable</code> can be declared on <code>Method</code> or <code>Constructor</code>, not just <code>Class</code></li> <li>Casting <code>getGenericDeclaration()</code> to <code>Class</code> would throw <code>ClassCastException</code> for method-level type variables</li> <li>Fix: Check declaration type and return first bound for non-class type variables</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>TypeUtilities</code> - Added array class cache to avoid repeated <code>Array.newInstance()</code> allocations in <code>getRawClass()</code></li> <li><strong>PERFORMANCE</strong>: <code>TypeUtilities</code> - Use <code>IdentitySet</code> instead of <code>HashSet</code> for cycle detection (reference equality is sufficient and faster)</li> <li><strong>IMPROVED</strong>: <code>TypeUtilities</code> - Simplified <code>hashCode()</code> implementations using standard <code>31 * result</code> pattern instead of <code>EncryptionUtilities.finalizeHash()</code></li> <li><strong>IMPROVED</strong>: <code>TypeUtilities.WildcardTypeImpl</code> - Constructor now takes ownership of arrays without cloning (internal class only)</li> <li><strong>IMPROVED</strong>: <code>DeepEquals</code> - Fixed Javadoc formatting using <code>{@code}</code> blocks for proper HTML rendering of generic types</li> <li><strong>DEPRECATED</strong>: <code>LRUCache(int capacity, int cleanupDelayMillis)</code> - The <code>cleanupDelayMillis</code> parameter is no longer used; use <code>LRUCache(int)</code> instead</li> <li><strong>BUILD</strong>: Added <code>@SuppressWarnings</code> annotations to eliminate compile warnings across multiple classes: <ul> <li><code>CaseInsensitiveMap</code>, <code>ClassUtilities</code>, <code>ConcurrentNavigableSetNullSafe</code>, <code>ConcurrentSet</code></li> <li><code>MultiKeyMap</code>, <code>ReflectionUtils</code>, <code>TTLCache</code>, <code>UrlUtilities</code>, <code>MapConversions</code></li> </ul> </li> <li><strong>BUILD</strong>: Removed unused regex timeout methods from <code>DateUtilities</code></li> <li><strong>BUILD</strong>: Cleaned up unused code in <code>ObjectConversions</code></li> <li><strong>PERFORMANCE</strong>: <code>MultiKeyMap</code> - Significant hot path optimizations using Class identity checks <ul> <li><code>valueHashCode()</code> - Reordered type checks to handle Integer/Long/Double first; uses Class identity (<code>==</code>) instead of <code>instanceof</code> for common types (55% CPU reduction in JFR profiling)</li> <li><code>computeElementHash()</code> - Added Class identity fast path for String/Integer/Long/Double, skipping 4+ instanceof checks for 75% of typical key elements</li> <li><code>flattenKey()</code> - Added fast path at method entry for String/Integer/Long/Double keys</li> <li><code>flattenObjectArrayN()</code> - Skip array/collection checks for known simple types</li> <li><code>isArrayOrCollection()</code> - Added Class identity short-circuit for common simple types</li> <li><strong>Result</strong>: Cedar MultiKeyMap win rate vs Apache Commons Collections improved from ~60% to ~71% in performance benchmarks, while providing thread-safety, null key/value support, unlimited key count, and value-based numeric equality that Apache lacks</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>ClassValueSet</code> - Optimized with Class identity checks <ul> <li><code>contains()</code> and <code>remove()</code> now use <code>o.getClass() == Class.class</code> instead of <code>instanceof</code></li> <li><code>clear()</code> no longer creates unnecessary HashSet copy before invalidating cache</li> </ul> </li> <li><strong>NEW</strong>: <code>IdentitySet<T></code> - High-performance generic Set using object identity (<code>==</code>) instead of <code>equals()</code> <ul> <li>Lightweight replacement for <code>Collections.newSetFromMap(new IdentityHashMap<>())</code></li> <li>Extends <code>AbstractSet<T></code> and implements full <code>Set<T></code> interface including <code>iterator()</code></li> <li>Uses open addressing with linear probing for excellent cache locality</li> </ul> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jdereg/java-util/commit/357a0aaea32fbafe66964f07a0c35207362a6586"><code>357a0aa</code></a> Update version references and temporarily exclude test</li> <li><a href="https://github.com/jdereg/java-util/commit/1d9af2006042beb930befa7bc2e7d28d20cdc02c"><code>1d9af20</code></a> Use resetCacheToDefault() in test cleanup methods</li> <li><a href="https://github.com/jdereg/java-util/commit/8322996abe439812e825579072af73a442baea67"><code>8322996</code></a> Optimize LRUCache performance and make it default for CaseInsensitiveMap</li> <li><a href="https://github.com/jdereg/java-util/commit/e719110616ddafe37aea18f48c4561f001c130bf"><code>e719110</code></a> Change BigInteger/BigDecimal to Map to store string values</li> <li><a href="https://github.com/jdereg/java-util/commit/9881be0a7159003261ec62111072888a98a28823"><code>9881be0</code></a> Fix Atomic → Map to store primitive values, not wrappers</li> <li><a href="https://github.com/jdereg/java-util/commit/1d3d8e0aa132499c3e4ad4ac46ba6aa6fd6aee21"><code>1d3d8e0</code></a> Add comprehensive BitSet conversions to Converter</li> <li><a href="https://github.com/jdereg/java-util/commit/f5537bca7f25388730e7e107c128b82f4c212951"><code>f5537bc</code></a> Remove json-io round-trip skips for BitSet, AtomicIntegerArray, AtomicLongArr...</li> <li><a href="https://github.com/jdereg/java-util/commit/18bc60b441bf0aa757158d11a19d0ed4f5552cdb"><code>18bc60b</code></a> Enhance Enum conversions and improve EnumSet handling in Converter</li> <li><a href="https://github.com/jdereg/java-util/commit/e4042f5539ad69134acf36dca68bfb07e931b342"><code>e4042f5</code></a> Fix flaky test: increase buffer for concurrent cache measurement race</li> <li><a href="https://github.com/jdereg/java-util/commit/e6681d64e53443d5379b0ad7eaaf1d2a0ecdc674"><code>e6681d6</code></a> Release 4.82.0 - Update version numbers and release date</li> <li>Additional commits viewable in <a href="https://github.com/jdereg/java-util/compare/4.81.0...v4.83.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
