3.1.8
- Added a workaround for a possible JDK concurrency bug with method handles (#1111)
3.1.7
Cache
- Improved builder construction time (#905)
JCache
- Fixed deadlock when a cache listener writes to another cache (#1065)
- Added
jakarta.inject
support, droppingjavax.inject
(#1009)
3.1.5
Cache
- Fixed
clear()
removing a key more than once due to a write-back removal listener (#872)
JCache
- Added support for loading the configuration from the cache manager's uri (#877)
v3.1.4
Add @CanIgnoreReturnValue annotations for static analysis (#868)
v3.1.3
Cache
- Fixed the build time dependency constraints from being leaked into the external metadata (#867)
- Fixed the behavior for null lookups to into returned unmodifiable maps to be consistent (#864)
- Fixed the cause of a removal notification for a discarded refresh when the entry was removed
- Fixed an unexpected delay of removal notifications when using a scheduler (#859)
- Fixed explicit refreshes from being deduped if the entry is pending eviction
- Defaulted methods to @CheckReturnValue for static analysis (#863)
- Reduced the lock hold time during Map.clear (#835)
JCache
- Fixed
putAll
with an immutable map that causes an exception when using a cache writer (#841)
v3.1.2
Cache
- Added detection when a key's equality changes and causes the underlying map to become corrupted (SOLR-16489)
- Improved the frequency sketch by reducing memory accessing by better utilizing the cpu cache line
- Fixed
computeIfAbsent
when replacing a collected weak/soft value and the custom expiry fails - Improved refresh conflict detection to avoid unnecessarily discarding after a reload
- Improved eviction when the weight is oversized (#745)
Guava
- Added an adapter from Guava's CacheLoader to Caffeine's (#766)
JCache
- Fixed
Cache.getConfiguration()
to return an immutable instance
3.1.1
- Fixed
refreshAfterWrite
when racing with a removed entry (#715) - Fixed gradle module metadata variant selection (#716)
3.1.0
- Fixed the publication of a removal notification when computing a null value on top of an expired entry
- Fixed the publication of a removal notification for a conditional replacement on an unbounded cache
- Fixed
Map.equals
when the traversal triggers an eviction and the subset of live entries matches - Improved refreshAfterWrite to return the new value if computed by the caller (#688, #699)
- Added Interner for weak keyed equality caching (#344)