dependabot[bot] opened a new pull request, #20693:
URL: https://github.com/apache/camel/pull/20693

   Bumps [com.cedarsoftware:java-util](https://github.com/jdereg/java-util) 
from 4.72.0 to 4.80.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.80.0 - 2025-01-05</h4>
   <ul>
   <li><strong>PERFORMANCE</strong>: Cache repeated <code>getClass()</code> 
calls in hot paths
   <ul>
   <li><code>ConcurrentNavigableMapNullSafe</code> - Cache 
<code>o1.getClass()</code> and <code>o2.getClass()</code> in comparator (6 
calls → 2)</li>
   <li><code>CollectionUtilities</code> - Cache class lookups in deep copy 
operations for source, pair.source, and element objects</li>
   <li><code>GraphComparator</code> - Cache <code>srcValue.getClass()</code> 
and <code>targetValue.getClass()</code> in compare loop (7 calls → 2)</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: <code>ClassUtilities</code> and 
<code>GraphComparator</code> - Replace 
<code>isAssignableFrom(obj.getClass())</code> with <code>isInstance(obj)</code>
   <ul>
   <li><code>ClassUtilities.java:2278</code> - Constructor parameter type 
matching now uses <code>isInstance()</code></li>
   <li><code>GraphComparator.java:375</code> - Field type validation now uses 
<code>isInstance()</code></li>
   <li><code>isInstance()</code> avoids the <code>getClass()</code> call, 
providing better performance on hot paths</li>
   </ul>
   </li>
   <li><strong>FIX</strong>: <code>ClassUtilities</code> - Fixed unsafe mode 
reentrancy issue with counter-based ThreadLocal approach
   <ul>
   <li>Previously, nested 
<code>setUseUnsafe(true)</code>/<code>setUseUnsafe(false)</code> calls would 
incorrectly disable unsafe mode for outer callers</li>
   <li>Changed from <code>ThreadLocal&lt;Boolean&gt;</code> to 
<code>ThreadLocal&lt;Integer&gt;</code> counter (<code>unsafeDepth</code>)</li>
   <li><code>setUseUnsafe(true)</code> increments the counter, 
<code>setUseUnsafe(false)</code> decrements (but not below 0)</li>
   <li>Unsafe mode is active when counter &gt; 0, supporting proper nesting</li>
   <li>Added comprehensive tests for nested calls, triple nesting, extra 
disables, and thread isolation</li>
   </ul>
   </li>
   <li><strong>FIX</strong>: <code>ThreadedLRUCacheStrategy</code> - Major 
concurrency fixes and architectural improvements:
   <ul>
   <li><strong>Architecture</strong>: Replaced per-instance ScheduledFutures 
with single shared cleanup thread for all cache instances. Uses WeakReference 
registry allowing unused caches to be garbage collected. Dead references pruned 
automatically during iteration.</li>
   <li><strong>Fix silent task death</strong>: Wrapped cleanup in try-catch to 
prevent ScheduledExecutorService from silently cancelling the task on 
exceptions.</li>
   <li><strong>Fix sort instability</strong>: Capture timestamps to array 
before sorting to prevent <code>IllegalArgumentException: Comparison method 
violates its general contract</code> caused by concurrent timestamp updates 
during sort.</li>
   <li><strong>Aggressive cleanup</strong>: When cache exceeds 10x capacity, 
removes all excess items immediately instead of batching.</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: 
<code>AbstractConcurrentNullSafeMap.computeIfAbsent()</code> - Added fast-path 
check before locking
   <ul>
   <li>Original implementation always called <code>compute()</code> which locks 
the bucket even for cache hits</li>
   <li>New implementation checks <code>get()</code> first - cache hits now 
bypass locking entirely</li>
   <li>Significant reduction in lock contention under concurrent load</li>
   </ul>
   </li>
   <li><strong>ADDED</strong>: <code>computeIfAbsent()</code> and 
<code>putIfAbsent()</code> support to LRU cache strategies
   <ul>
   <li><code>ThreadedLRUCacheStrategy</code> - atomic operations with timestamp 
updates</li>
   <li><code>LockingLRUCacheStrategy</code> - atomic operations with LRU 
reordering</li>
   <li><code>LRUCache</code> - delegation to underlying strategy</li>
   </ul>
   </li>
   </ul>
   </blockquote>
   </details>
   <details>
   <summary>Commits</summary>
   <ul>
   <li><a 
href="https://github.com/jdereg/java-util/commit/0a07c6950b942ec367828512505f5a74fa6309b7";><code>0a07c69</code></a>
 Prepare 4.80.0 release</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/6c1469547d7ac76cac333d550f7cfdabc4b2c698";><code>6c14695</code></a>
 Update changelog with ThreadedLRUCacheStrategy fixes</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/4b22f468799d0928c84606e139b68e42db3878d5";><code>4b22f46</code></a>
 Fix ThreadedLRUCacheStrategy concurrency issues and performance</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/59b654e6857eb1043146484a69083911c1a052b7";><code>59b654e</code></a>
 Update json-io test dependency to 4.72.0</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/4a6b88551261f67df8b67c7cf2dd078559905a0c";><code>4a6b885</code></a>
 Performance: Cache repeated getClass() calls in hot paths</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/47d469f6674c87bece20a0f3d6f8ae54f6efa01a";><code>47d469f</code></a>
 Update changelog with isInstance() performance optimizations</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/a0ae913f04b640b3ecab1ee576544341261436a8";><code>a0ae913</code></a>
 Performance and reliability improvements for ClassUtilities and 
GraphComparator</li>
   <li>See full diff in <a 
href="https://github.com/jdereg/java-util/compare/4.72.0...4.80.0";>compare 
view</a></li>
   </ul>
   </details>
   <br />
   
   
   [![Dependabot compatibility 
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.cedarsoftware:java-util&package-manager=maven&previous-version=4.72.0&new-version=4.80.0)](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]

Reply via email to