├── .circleci └── config.yml ├── .codecov.yml ├── .deepsource.toml ├── .editorconfig ├── .gitattributes ├── .github ├── SECURITY.md ├── actions │ ├── run-gradle │ │ └── action.yml │ └── spelling │ │ ├── README.md │ │ ├── advice.md │ │ ├── allow.txt │ │ ├── block-delimiters.list │ │ ├── candidate.patterns │ │ ├── excludes.txt │ │ ├── expect.txt │ │ ├── line_forbidden.patterns │ │ ├── patterns.txt │ │ └── reject.txt ├── dependabot.yml ├── problem-matcher.json ├── scripts │ ├── analyze.sh │ └── dependencyUpdates.sh ├── workflows │ ├── actionlint.yml │ ├── analysis.yml │ ├── benchmarks.yml │ ├── build.yml │ ├── codacy.yml │ ├── codeql.yml │ ├── dependency-check.yml │ ├── dependency-review.yml │ ├── dependency-submission-pr-retrieve.yml │ ├── dependency-submission-pr-submit.yml │ ├── dependency-submission.yml │ ├── devskim.yml │ ├── early-access.yml │ ├── examples.yml │ ├── gitleaks.yml │ ├── gradle-wrapper-validation.yml │ ├── qodana.yml │ ├── release.yml │ ├── scorecards-analysis.yml │ ├── semgrep.yml │ ├── snyk.yml │ ├── spelling.yml │ └── trivy.yml └── zizmor.yml ├── .gitignore ├── .gitleaksignore ├── .typos.toml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── build.gradle.kts ├── caffeine ├── build.gradle.kts └── src │ ├── javaPoet │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── cache │ │ │ ├── Feature.java │ │ │ ├── LocalCacheFactoryGenerator.java │ │ │ ├── NodeFactoryGenerator.java │ │ │ ├── Specifications.java │ │ │ ├── local │ │ │ ├── AddConstructor.java │ │ │ ├── AddDeques.java │ │ │ ├── AddExpirationTicker.java │ │ │ ├── AddExpireAfterAccess.java │ │ │ ├── AddExpireAfterWrite.java │ │ │ ├── AddFastPath.java │ │ │ ├── AddKeyValueStrength.java │ │ │ ├── AddMaximum.java │ │ │ ├── AddPacer.java │ │ │ ├── AddRefreshAfterWrite.java │ │ │ ├── AddRemovalListener.java │ │ │ ├── AddStats.java │ │ │ ├── AddSubtype.java │ │ │ ├── Finalize.java │ │ │ ├── LocalCacheContext.java │ │ │ ├── LocalCacheRule.java │ │ │ └── package-info.java │ │ │ ├── node │ │ │ ├── AddConstructors.java │ │ │ ├── AddDeques.java │ │ │ ├── AddExpiration.java │ │ │ ├── AddFactoryMethods.java │ │ │ ├── AddHealth.java │ │ │ ├── AddKey.java │ │ │ ├── AddMaximum.java │ │ │ ├── AddSubtype.java │ │ │ ├── AddValue.java │ │ │ ├── Finalize.java │ │ │ ├── NodeContext.java │ │ │ ├── NodeRule.java │ │ │ └── package-info.java │ │ │ └── package-info.java │ └── resources │ │ └── license.txt │ ├── jmh │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ ├── DelegationBenchmark.java │ │ ├── FactoryBenchmark.java │ │ ├── SlotLookupBenchmark.java │ │ ├── TimeBenchmark.java │ │ ├── cache │ │ ├── BasicCache.java │ │ ├── BuilderBenchmark.java │ │ ├── CacheType.java │ │ ├── ComputeBenchmark.java │ │ ├── EvictionBenchmark.java │ │ ├── ExpireWriteToleranceBenchmark.java │ │ ├── FrequencySketchBenchmark.java │ │ ├── GetPutBenchmark.java │ │ ├── MemoryBenchmark.java │ │ ├── PutRemoveBenchmark.java │ │ ├── ReadBufferBenchmark.java │ │ ├── SketchType.java │ │ ├── TimerWheelBenchmark.java │ │ ├── impl │ │ │ ├── Cache2k.java │ │ │ ├── CaffeineCache.java │ │ │ ├── CoherenceCache.java │ │ │ ├── ConcurrentMapCache.java │ │ │ ├── Ehcache3.java │ │ │ ├── GuavaCache.java │ │ │ ├── HazelcastCache.java │ │ │ ├── LinkedHashMapCache.java │ │ │ ├── TCache.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── sketch │ │ │ ├── CountMinSketch.java │ │ │ ├── TinyLfuSketch.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── profiler │ │ ├── CacheProfiler.java │ │ ├── ProfilerHook.java │ │ └── package-info.java │ ├── main │ └── java │ │ ├── com │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── cache │ │ │ ├── AbstractLinkedDeque.java │ │ │ ├── AccessOrderDeque.java │ │ │ ├── Async.java │ │ │ ├── AsyncCache.java │ │ │ ├── AsyncCacheLoader.java │ │ │ ├── AsyncLoadingCache.java │ │ │ ├── BoundedBuffer.java │ │ │ ├── BoundedLocalCache.java │ │ │ ├── Buffer.java │ │ │ ├── Cache.java │ │ │ ├── CacheLoader.java │ │ │ ├── Caffeine.java │ │ │ ├── CaffeineSpec.java │ │ │ ├── Expiry.java │ │ │ ├── FrequencySketch.java │ │ │ ├── Interner.java │ │ │ ├── LinkedDeque.java │ │ │ ├── LoadingCache.java │ │ │ ├── LocalAsyncCache.java │ │ │ ├── LocalAsyncLoadingCache.java │ │ │ ├── LocalCache.java │ │ │ ├── LocalCacheFactory.java │ │ │ ├── LocalLoadingCache.java │ │ │ ├── LocalManualCache.java │ │ │ ├── MpscGrowableArrayQueue.java │ │ │ ├── Node.java │ │ │ ├── NodeFactory.java │ │ │ ├── Pacer.java │ │ │ ├── Policy.java │ │ │ ├── References.java │ │ │ ├── RemovalCause.java │ │ │ ├── RemovalListener.java │ │ │ ├── Scheduler.java │ │ │ ├── SerializationProxy.java │ │ │ ├── SnapshotEntry.java │ │ │ ├── StripedBuffer.java │ │ │ ├── Ticker.java │ │ │ ├── TimerWheel.java │ │ │ ├── UnboundedLocalCache.java │ │ │ ├── Weigher.java │ │ │ ├── WriteOrderDeque.java │ │ │ ├── WriteThroughEntry.java │ │ │ ├── package-info.java │ │ │ └── stats │ │ │ ├── CacheStats.java │ │ │ ├── ConcurrentStatsCounter.java │ │ │ ├── DisabledStatsCounter.java │ │ │ ├── GuardedStatsCounter.java │ │ │ ├── StatsCounter.java │ │ │ └── package-info.java │ │ └── module-info.java │ └── test │ └── java │ └── com │ └── github │ └── benmanes │ └── caffeine │ ├── OSGiTest.java │ ├── apache │ ├── CaffeineMapTest.java │ └── package-info.java │ ├── cache │ ├── AsMapTest.java │ ├── AsyncAsMapTest.java │ ├── AsyncCacheTest.java │ ├── AsyncLoadingCacheTest.java │ ├── AsyncTest.java │ ├── BoundedBufferTest.java │ ├── BoundedLocalCacheTest.java │ ├── CacheTest.java │ ├── CaffeineSpecGuavaTest.java │ ├── CaffeineSpecTest.java │ ├── CaffeineTest.java │ ├── EvictionTest.java │ ├── ExpirationTest.java │ ├── ExpireAfterAccessTest.java │ ├── ExpireAfterVarTest.java │ ├── ExpireAfterWriteTest.java │ ├── FrequencySketchTest.java │ ├── InternerTest.java │ ├── LinkedDequeSubject.java │ ├── LinkedDequeTest.java │ ├── LinkedDequeTests.java │ ├── LoadingCacheTest.java │ ├── LocalCacheSubject.java │ ├── MpscGrowableArrayQueueLincheckTest.java │ ├── MpscGrowableArrayQueueTest.java │ ├── MpscGrowableQueueSanityTest.java │ ├── MultiThreadedTest.java │ ├── PacerTest.java │ ├── PackageSanityTests.java │ ├── QueueSanityTest.java │ ├── ReferenceTest.java │ ├── RefreshAfterWriteTest.java │ ├── ReserializableSubject.java │ ├── Reset.java │ ├── SchedulerTest.java │ ├── Stresser.java │ ├── StripedBufferTest.java │ ├── TimerWheelTest.java │ ├── UnboundedLocalCacheTest.java │ ├── buffer │ │ ├── BufferTest.java │ │ ├── BufferType.java │ │ ├── FastFlowBuffer.java │ │ ├── ManyToOneBuffer.java │ │ ├── ManyToOneSpacedBuffer.java │ │ ├── MpmcArrayBuffer.java │ │ ├── MpscArrayBuffer.java │ │ ├── MpscCompoundBuffer.java │ │ ├── ReadBuffer.java │ │ ├── TicketBuffer.java │ │ └── package-info.java │ ├── issues │ │ ├── HashClashTest.java │ │ ├── Issue193Test.java │ │ ├── Issue298Test.java │ │ ├── Issue30Test.java │ │ ├── Issue412Test.java │ │ ├── Issue568Test.java │ │ ├── Issue859Test.java │ │ ├── Solr10141Test.java │ │ └── package-info.java │ ├── package-info.java │ ├── stats │ │ ├── CacheStatsTest.java │ │ ├── PackageSanityTests.java │ │ ├── StatsCounterTest.java │ │ └── package-info.java │ └── testing │ │ ├── AsyncCacheSubject.java │ │ ├── CacheContext.java │ │ ├── CacheContextSubject.java │ │ ├── CacheGenerator.java │ │ ├── CacheProvider.java │ │ ├── CacheSpec.java │ │ ├── CacheSubject.java │ │ ├── CacheValidationListener.java │ │ ├── CaffeineCacheFromContext.java │ │ ├── CheckMaxLogLevel.java │ │ ├── CheckNoEvictions.java │ │ ├── CheckNoStats.java │ │ ├── ExpireAfterAccess.java │ │ ├── ExpireAfterWrite.java │ │ ├── GuavaCacheFromContext.java │ │ ├── Options.java │ │ ├── RemovalListeners.java │ │ ├── RemovalNotification.java │ │ ├── TrackingExecutor.java │ │ ├── Weighers.java │ │ └── package-info.java │ ├── eclipse │ ├── ConcurrentMapAdapter.java │ ├── acceptance │ │ ├── CaffeineMapAcceptanceTestCase.java │ │ ├── CollidingInt.java │ │ ├── ConcurrentHashMapAcceptanceTest.java │ │ ├── ParallelMapIteratePutAcceptanceTest.java │ │ ├── UnifiedMapAcceptanceTest.java │ │ └── package-info.java │ ├── mutable │ │ ├── CaffeineMutableMapTestCase.java │ │ ├── ConcurrentHashMapTest.java │ │ ├── ConcurrentHashMapTestCase.java │ │ ├── ConcurrentMutableHashMapTest.java │ │ ├── IntegerSum.java │ │ ├── IntegerWithCast.java │ │ ├── Key.java │ │ ├── MapIterableTestCase.java │ │ ├── MutableMapIterableTestCase.java │ │ ├── MutableMapTestCase.java │ │ ├── NegativeIntervalFunction.java │ │ ├── Sum.java │ │ ├── SumProcedure.java │ │ ├── UnifiedMapTestCase.java │ │ └── package-info.java │ └── package-info.java │ ├── fuzz │ ├── CaffeineSpecFuzzer.java │ └── package-info.java │ ├── google │ ├── CaffeineMapTests.java │ ├── MapTestFactory.java │ └── package-info.java │ ├── jsr166 │ ├── Collection8Test.java │ ├── CollectionImplementation.java │ ├── CollectionTest.java │ ├── ConcurrentHashMap8Test.java │ ├── ConcurrentHashMapTest.java │ ├── Item.java │ ├── JSR166TestCase.java │ ├── KeySetTest.java │ ├── MapImplementation.java │ ├── MapTest.java │ └── package-info.java │ ├── lincheck │ ├── AbstractLincheckCacheTest.java │ ├── CaffeineLincheckTest.java │ └── package-info.java │ ├── openjdk │ ├── collection │ │ ├── BiggernYours.java │ │ ├── IteratorAtEnd.java │ │ ├── MOAT.java │ │ └── package-info.java │ ├── concurrent │ │ ├── concurrenthashmap │ │ │ ├── ConcurrentAssociateTest.java │ │ │ ├── ConcurrentContainsKeyTest.java │ │ │ ├── DistinctEntrySetElements.java │ │ │ ├── LoopHelpers.java │ │ │ ├── MapCheck.java │ │ │ ├── MapLoops.java │ │ │ ├── ToArray.java │ │ │ └── package-info.java │ │ └── concurrentmap │ │ │ ├── ConcurrentModification.java │ │ │ ├── ConcurrentRemoveIf.java │ │ │ └── package-info.java │ └── map │ │ ├── Collisions.java │ │ ├── Defaults.java │ │ ├── EntryHashCode.java │ │ ├── Get.java │ │ ├── InPlaceOpsCollisions.java │ │ ├── LockStep.java │ │ ├── MapBinToFromTreeTest.java │ │ ├── MapWithCollisionsProviders.java │ │ ├── ToArray.java │ │ └── package-info.java │ ├── package-info.java │ └── testing │ ├── Awaits.java │ ├── CollectionSubject.java │ ├── ConcurrentTestHarness.java │ ├── FutureSubject.java │ ├── Int.java │ ├── IntSubject.java │ ├── LoggingEvents.java │ ├── MapSubject.java │ ├── Threads.java │ └── package-info.java ├── examples ├── coalescing-bulkloader-reactor │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ ├── gradle-daemon-jvm.properties │ │ ├── libs.versions.toml │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── examples │ │ │ └── coalescing │ │ │ └── bulkloader │ │ │ └── CoalescingBulkLoader.java │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── coalescing │ │ └── bulkloader │ │ └── CoalescingBulkLoaderTest.java ├── graal-native │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ ├── libs.versions.toml │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── benmanes │ │ │ │ └── caffeine │ │ │ │ └── examples │ │ │ │ └── graalnative │ │ │ │ └── Application.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── native-image │ │ │ ├── jni-config.json │ │ │ ├── predefined-classes-config.json │ │ │ ├── proxy-config.json │ │ │ ├── reflect-config.json │ │ │ ├── resource-config.json │ │ │ └── serialization-config.json │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── graalnative │ │ └── ApplicationTest.java ├── hibernate │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ ├── gradle-daemon-jvm.properties │ │ ├── libs.versions.toml │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── benmanes │ │ │ │ └── caffeine │ │ │ │ └── examples │ │ │ │ └── hibernate │ │ │ │ ├── Project.java │ │ │ │ ├── Queries.java │ │ │ │ ├── Skill.java │ │ │ │ └── User.java │ │ └── resources │ │ │ ├── application.conf │ │ │ ├── hibernate.properties │ │ │ └── log4j2.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── hibernate │ │ ├── HibernateCacheTest.java │ │ └── HibernateSubject.java ├── indexable │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ ├── gradle-daemon-jvm.properties │ │ ├── libs.versions.toml │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── examples │ │ │ └── indexable │ │ │ └── IndexedCache.java │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── indexable │ │ └── IndexedCacheTest.java ├── resilience-failsafe │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ ├── gradle-daemon-jvm.properties │ │ ├── libs.versions.toml │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── resilience │ │ └── ResilienceTest.java └── write-behind-rxjava │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ ├── gradle-daemon-jvm.properties │ ├── libs.versions.toml │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ └── src │ ├── main │ └── java │ │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── examples │ │ └── writebehind │ │ └── rxjava │ │ └── WriteBehindCacheWriter.java │ └── test │ └── java │ └── com │ └── github │ └── benmanes │ └── caffeine │ └── examples │ └── writebehind │ └── rxjava │ └── WriteBehindCacheWriterTest.java ├── gradle.properties ├── gradle ├── config │ ├── eclipse │ │ ├── Simulator.launch │ │ └── org.eclipse.jdt.core.prefs │ ├── pmd │ │ ├── rulesSets-test.xml │ │ └── rulesSets.xml │ └── spotbugs │ │ └── exclude.xml ├── develocity.gradle ├── gradle-daemon-jvm.properties ├── libs.versions.toml ├── plugins │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ └── gradle-daemon-jvm.properties │ ├── settings.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ ├── ProjectExtensions.kt │ │ ├── TaskExtensions.kt │ │ ├── analyze │ │ ├── jmh.caffeine.gradle.kts │ │ └── object-layout.caffeine.gradle.kts │ │ ├── lifecycle │ │ ├── base.caffeine.gradle.kts │ │ ├── eclipse.caffeine.gradle.kts │ │ ├── intellij.caffeine.gradle.kts │ │ ├── java-library.caffeine.gradle.kts │ │ ├── publish.caffeine.gradle.kts │ │ ├── root.caffeine.gradle.kts │ │ ├── testing.caffeine.gradle.kts │ │ └── versions.caffeine.gradle.kts │ │ └── quality │ │ ├── checkstyle.caffeine.gradle.kts │ │ ├── coverage.caffeine.gradle.kts │ │ ├── dependency-check.caffeine.gradle.kts │ │ ├── ecj.caffeine.gradle.kts │ │ ├── errorprone.caffeine.gradle.kts │ │ ├── forbidden-apis.caffeine.gradle.kts │ │ ├── jacoco.caffeine.gradle.kts │ │ ├── pmd.caffeine.gradle.kts │ │ ├── sonarqube.caffeine.gradle.kts │ │ └── spotbugs.caffeine.gradle.kts └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── guava ├── build.gradle.kts └── src │ ├── main │ └── java │ │ ├── com │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── guava │ │ │ ├── CaffeinatedGuava.java │ │ │ ├── CaffeinatedGuavaCache.java │ │ │ ├── CaffeinatedGuavaLoadingCache.java │ │ │ └── package-info.java │ │ └── module-info.java │ └── test │ └── java │ └── com │ └── github │ └── benmanes │ └── caffeine │ └── guava │ ├── CaffeinatedGuavaTest.java │ ├── GuavaMapTests.java │ ├── MapTestFactory.java │ ├── OSGiTest.java │ ├── PackageSanityTests.java │ ├── compatibility │ ├── AbstractCacheTest.java │ ├── CacheBuilderFactory.java │ ├── CacheBuilderGwtTest.java │ ├── CacheBuilderTest.java │ ├── CacheEvictionTest.java │ ├── CacheExpirationTest.java │ ├── CacheLoadingTest.java │ ├── CacheManualTest.java │ ├── CacheReferencesTest.java │ ├── CacheRefreshTest.java │ ├── CacheStatsTest.java │ ├── CacheTesting.java │ ├── EmptyCachesTest.java │ ├── LocalCacheMapComputeTest.java │ ├── LocalLoadingCacheTest.java │ ├── NullCacheTest.java │ ├── PopulatedCachesTest.java │ ├── TestingCacheLoaders.java │ ├── TestingRemovalListeners.java │ ├── TestingWeighers.java │ └── package-info.java │ └── package-info.java ├── jcache ├── build.gradle.kts └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── jcache │ │ │ ├── CacheFactory.java │ │ │ ├── CacheManagerImpl.java │ │ │ ├── CacheProxy.java │ │ │ ├── EntryProxy.java │ │ │ ├── Expirable.java │ │ │ ├── LoadingCacheProxy.java │ │ │ ├── configuration │ │ │ ├── CaffeineConfiguration.java │ │ │ ├── ConfigSource.java │ │ │ ├── FactoryCreator.java │ │ │ ├── TypesafeConfigurator.java │ │ │ └── package-info.java │ │ │ ├── copy │ │ │ ├── AbstractCopier.java │ │ │ ├── Copier.java │ │ │ ├── JavaSerializationCopier.java │ │ │ └── package-info.java │ │ │ ├── event │ │ │ ├── EventDispatcher.java │ │ │ ├── EventTypeAwareListener.java │ │ │ ├── EventTypeFilter.java │ │ │ ├── JCacheEntryEvent.java │ │ │ ├── JCacheEvictionListener.java │ │ │ ├── Registration.java │ │ │ └── package-info.java │ │ │ ├── expiry │ │ │ ├── JCacheExpiryPolicy.java │ │ │ └── package-info.java │ │ │ ├── integration │ │ │ ├── DisabledCacheWriter.java │ │ │ ├── JCacheLoaderAdapter.java │ │ │ └── package-info.java │ │ │ ├── management │ │ │ ├── JCacheMXBean.java │ │ │ ├── JCacheStatisticsMXBean.java │ │ │ ├── JmxRegistration.java │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── processor │ │ │ ├── Action.java │ │ │ ├── EntryProcessorEntry.java │ │ │ └── package-info.java │ │ │ └── spi │ │ │ ├── CaffeineCachingProvider.java │ │ │ └── package-info.java │ └── resources │ │ ├── META-INF │ │ └── services │ │ │ └── javax.cache.spi.CachingProvider │ │ └── reference.conf │ └── test │ ├── java │ └── com │ │ └── github │ │ └── benmanes │ │ └── caffeine │ │ └── jcache │ │ ├── AbstractJCacheTest.java │ │ ├── CacheManagerTest.java │ │ ├── CacheProxyTest.java │ │ ├── JCacheProfiler.java │ │ ├── OSGiTest.java │ │ ├── configuration │ │ ├── JCacheConfigurationTest.java │ │ ├── TestCacheEntryEventFilter.java │ │ ├── TestCacheEntryListener.java │ │ ├── TestCacheLoader.java │ │ ├── TestCacheWriter.java │ │ ├── TestExecutor.java │ │ ├── TestExpiry.java │ │ ├── TestScheduler.java │ │ ├── TestWeigher.java │ │ ├── TypesafeConfigurationTest.java │ │ └── package-info.java │ │ ├── copy │ │ ├── JavaSerializationCopierTest.java │ │ └── package-info.java │ │ ├── event │ │ ├── EventDispatcherTest.java │ │ ├── EventTypeAwareListenerTest.java │ │ ├── EventTypeFilterTest.java │ │ ├── JCacheEntryEventTest.java │ │ ├── JCacheEvictionListenerTest.java │ │ └── package-info.java │ │ ├── expiry │ │ ├── JCacheAccessExpiryTest.java │ │ ├── JCacheCombinedExpiryTest.java │ │ ├── JCacheCreationExpiryTest.java │ │ ├── JCacheExpiryAndMaximumSizeTest.java │ │ ├── JCacheExpiryPolicyTest.java │ │ ├── JCacheExpiryTest.java │ │ ├── JCacheUpdateExpiryTest.java │ │ └── package-info.java │ │ ├── guice │ │ ├── JCacheGuiceTest.java │ │ └── JakartaCacheModule.java │ │ ├── integration │ │ ├── CacheLoaderTest.java │ │ ├── CacheWriterTest.java │ │ └── package-info.java │ │ ├── issues │ │ ├── Issue1065Test.java │ │ └── package-info.java │ │ ├── management │ │ ├── JCacheMBeanServerBuilder.java │ │ ├── JCacheStatisticsMXBeanTest.java │ │ ├── JmxRegistrationTest.java │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── processor │ │ ├── EntryProcessorEntryTest.java │ │ ├── EntryProcessorTest.java │ │ └── package-info.java │ │ ├── size │ │ ├── JCacheMaximumSizeTest.java │ │ ├── JCacheMaximumWeightTest.java │ │ └── package-info.java │ │ └── spi │ │ ├── CaffeineCachingProviderTest.java │ │ └── package-info.java │ ├── resources-extra │ ├── extra-invalid.conf │ └── extra.properties │ └── resources │ ├── ExcludeList │ ├── application.conf │ ├── custom.properties │ └── invalid.conf ├── jitpack.yml ├── qodana.yaml ├── settings.gradle.kts ├── simulator ├── build.gradle.kts └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── cache │ │ │ └── simulator │ │ │ ├── BasicSettings.java │ │ │ ├── Simulate.java │ │ │ ├── Simulator.java │ │ │ ├── Synthetic.java │ │ │ ├── admission │ │ │ ├── Admission.java │ │ │ ├── Admittor.java │ │ │ ├── Frequency.java │ │ │ ├── TinyLfu.java │ │ │ ├── clairvoyant │ │ │ │ ├── Clairvoyant.java │ │ │ │ └── package-info.java │ │ │ ├── countmin4 │ │ │ │ ├── ClimberResetCountMin4.java │ │ │ │ ├── CountMin4.java │ │ │ │ ├── IncrementalResetCountMin4.java │ │ │ │ ├── IndicatorResetCountMin4.java │ │ │ │ ├── PeriodicResetCountMin4.java │ │ │ │ └── package-info.java │ │ │ ├── countmin64 │ │ │ │ ├── CountMin64.java │ │ │ │ ├── CountMin64TinyLfu.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── perfect │ │ │ │ ├── PerfectFrequency.java │ │ │ │ └── package-info.java │ │ │ ├── table │ │ │ │ ├── RandomRemovalFrequencyTable.java │ │ │ │ └── package-info.java │ │ │ └── tinycache │ │ │ │ ├── HashFunctionParser.java │ │ │ │ ├── HashedItem.java │ │ │ │ ├── TinyCache.java │ │ │ │ ├── TinyCacheAdapter.java │ │ │ │ ├── TinyCacheSketch.java │ │ │ │ ├── TinyCacheWithGhostCache.java │ │ │ │ ├── TinySetIndexing.java │ │ │ │ └── package-info.java │ │ │ ├── membership │ │ │ ├── FilterType.java │ │ │ ├── Membership.java │ │ │ ├── bloom │ │ │ │ ├── BloomFilter.java │ │ │ │ ├── FastFilter.java │ │ │ │ ├── GuavaBloomFilter.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── parser │ │ │ ├── AbstractTraceReader.java │ │ │ ├── BinaryTraceReader.java │ │ │ ├── OutputFormat.java │ │ │ ├── Rewriter.java │ │ │ ├── TextTraceReader.java │ │ │ ├── TraceFormat.java │ │ │ ├── TraceReader.java │ │ │ ├── TraceWriter.java │ │ │ ├── adapt_size │ │ │ │ ├── AdaptSizeTraceReader.java │ │ │ │ ├── AdaptSizeTraceWriter.java │ │ │ │ └── package-info.java │ │ │ ├── address │ │ │ │ ├── AddressTraceReader.java │ │ │ │ ├── package-info.java │ │ │ │ └── penalties │ │ │ │ │ ├── AddressPenaltiesTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ ├── arc │ │ │ │ ├── ArcTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── baleen │ │ │ │ ├── BaleenTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── cache2k │ │ │ │ ├── Cache2kTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── cachelib │ │ │ │ ├── CachelibTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── camelab │ │ │ │ ├── CamelabTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── cloud_physics │ │ │ │ ├── CloudPhysicsTraceReader.java │ │ │ │ ├── CloudPhysicsTraceWriter.java │ │ │ │ └── package-info.java │ │ │ ├── corda │ │ │ │ ├── CordaTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── glcache │ │ │ │ ├── GLCacheTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── gradle │ │ │ │ ├── GradleTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── kaggle │ │ │ │ ├── OutbrainTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── libcachesim │ │ │ │ ├── csv │ │ │ │ │ ├── LibCacheSimCsvTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ └── twitter │ │ │ │ │ ├── LibCacheSimTwitterTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ ├── lirs │ │ │ │ ├── LirsTraceReader.java │ │ │ │ ├── LirsTraceWriter.java │ │ │ │ └── package-info.java │ │ │ ├── lrb │ │ │ │ ├── LrbTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── scarab │ │ │ │ ├── ScarabTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── snia │ │ │ │ ├── cambridge │ │ │ │ │ ├── CambridgeTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── enterprise │ │ │ │ │ ├── EnterpriseTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── keyvalue │ │ │ │ │ ├── ObjectStoreTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── parallel │ │ │ │ │ ├── K5cloudTraceReader.java │ │ │ │ │ ├── TencentBlockTraceReader.java │ │ │ │ │ ├── TencentPhotoTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ └── systor │ │ │ │ │ ├── SystorTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ ├── tragen │ │ │ │ ├── TragenTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── twitter │ │ │ │ ├── TwitterTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── umass │ │ │ │ ├── network │ │ │ │ │ ├── YoutubeTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ │ └── storage │ │ │ │ │ ├── StorageTraceReader.java │ │ │ │ │ └── package-info.java │ │ │ └── wikipedia │ │ │ │ ├── WikipediaTraceReader.java │ │ │ │ └── package-info.java │ │ │ ├── policy │ │ │ ├── AccessEvent.java │ │ │ ├── Policy.java │ │ │ ├── PolicyActor.java │ │ │ ├── PolicyStats.java │ │ │ ├── Registry.java │ │ │ ├── adaptive │ │ │ │ ├── ArcPolicy.java │ │ │ │ ├── CarPolicy.java │ │ │ │ ├── CartPolicy.java │ │ │ │ └── package-info.java │ │ │ ├── greedy_dual │ │ │ │ ├── CampPolicy.java │ │ │ │ ├── GDWheelPolicy.java │ │ │ │ ├── GdsfPolicy.java │ │ │ │ └── package-info.java │ │ │ ├── irr │ │ │ │ ├── ClockProPlusPolicy.java │ │ │ │ ├── ClockProPolicy.java │ │ │ │ ├── ClockProSimplePolicy.java │ │ │ │ ├── DClockPolicy.java │ │ │ │ ├── FrdPolicy.java │ │ │ │ ├── HillClimberFrdPolicy.java │ │ │ │ ├── IndicatorFrdPolicy.java │ │ │ │ ├── LirsPolicy.java │ │ │ │ └── package-info.java │ │ │ ├── linked │ │ │ │ ├── FrequentlyUsedPolicy.java │ │ │ │ ├── LinkedPolicy.java │ │ │ │ ├── MultiQueuePolicy.java │ │ │ │ ├── S4LruPolicy.java │ │ │ │ ├── SegmentedLruPolicy.java │ │ │ │ ├── SievePolicy.java │ │ │ │ └── package-info.java │ │ │ ├── opt │ │ │ │ ├── ClairvoyantPolicy.java │ │ │ │ ├── UnboundedPolicy.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── product │ │ │ │ ├── Cache2kPolicy.java │ │ │ │ ├── CaffeinePolicy.java │ │ │ │ ├── CoherencePolicy.java │ │ │ │ ├── Ehcache3Policy.java │ │ │ │ ├── ExpiringMapPolicy.java │ │ │ │ ├── GuavaPolicy.java │ │ │ │ ├── HazelcastPolicy.java │ │ │ │ ├── TCachePolicy.java │ │ │ │ └── package-info.java │ │ │ ├── sampled │ │ │ │ ├── SampledPolicy.java │ │ │ │ └── package-info.java │ │ │ ├── sketch │ │ │ │ ├── Indicator.java │ │ │ │ ├── WindowTinyLfuPolicy.java │ │ │ │ ├── climbing │ │ │ │ │ ├── AbstractClimber.java │ │ │ │ │ ├── HillClimber.java │ │ │ │ │ ├── HillClimberType.java │ │ │ │ │ ├── HillClimberWindowTinyLfuPolicy.java │ │ │ │ │ ├── gradient │ │ │ │ │ │ ├── Adam.java │ │ │ │ │ │ ├── AmsGrad.java │ │ │ │ │ │ ├── Nadam.java │ │ │ │ │ │ ├── Stochastic.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── hill │ │ │ │ │ │ ├── SimpleClimber.java │ │ │ │ │ │ ├── SimulatedAnnealingClimber.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── inference │ │ │ │ │ │ ├── IndicatorClimber.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── sim │ │ │ │ │ │ ├── MiniSimClimber.java │ │ │ │ │ │ └── package-info.java │ │ │ │ ├── feedback │ │ │ │ │ ├── FeedbackTinyLfuPolicy.java │ │ │ │ │ ├── FeedbackWindowTinyLfuPolicy.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── segment │ │ │ │ │ ├── FullySegmentedWindowTinyLfuPolicy.java │ │ │ │ │ ├── LruWindowTinyLfuPolicy.java │ │ │ │ │ ├── RandomWindowTinyLfuPolicy.java │ │ │ │ │ ├── S4WindowTinyLfuPolicy.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tinycache │ │ │ │ │ ├── TinyCachePolicy.java │ │ │ │ │ ├── TinyCacheWithGhostCachePolicy.java │ │ │ │ │ ├── WindowTinyCachePolicy.java │ │ │ │ │ └── package-info.java │ │ │ └── two_queue │ │ │ │ ├── S3FifoPolicy.java │ │ │ │ ├── TuQueuePolicy.java │ │ │ │ ├── TwoQueuePolicy.java │ │ │ │ └── package-info.java │ │ │ └── report │ │ │ ├── Metrics.java │ │ │ ├── ReportFormat.java │ │ │ ├── Reporter.java │ │ │ ├── TextReporter.java │ │ │ ├── csv │ │ │ ├── CombinedCsvReport.java │ │ │ ├── CsvReporter.java │ │ │ ├── PlotCsv.java │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── table │ │ │ ├── TableReporter.java │ │ │ └── package-info.java │ └── resources │ │ ├── com │ │ └── github │ │ │ └── benmanes │ │ │ └── caffeine │ │ │ └── cache │ │ │ └── simulator │ │ │ └── parser │ │ │ ├── adapt_size │ │ │ └── request.trace.xz │ │ │ ├── address │ │ │ ├── gcc.trace.gz │ │ │ ├── gzip.trace.gz │ │ │ ├── mcf.trace.gz │ │ │ ├── penalties │ │ │ │ └── gcc.trace.xz │ │ │ ├── swim.trace.gz │ │ │ └── twolf.trace.gz │ │ │ ├── cache2k │ │ │ ├── LICENSE.txt │ │ │ ├── orm-busy.trace.xz │ │ │ ├── orm-night.trace.xz │ │ │ ├── web07.trace.xz │ │ │ └── web12.trace.xz │ │ │ ├── cloud_physics │ │ │ └── w106.trace.xz │ │ │ ├── corda │ │ │ ├── trace_vaultservice.gz │ │ │ └── trace_vaultservice_large.gz │ │ │ ├── gradle │ │ │ └── build-cache.xz │ │ │ ├── lirs │ │ │ ├── 2_pools.trace.gz │ │ │ ├── README │ │ │ ├── backf.trace.gz │ │ │ ├── clock-pro.c │ │ │ ├── clock-pro.h │ │ │ ├── cpp.trace.gz │ │ │ ├── cs.trace.gz │ │ │ ├── gli.trace.gz │ │ │ ├── lirs.c │ │ │ ├── lirs.h │ │ │ ├── loop.trace.gz │ │ │ ├── multi1.trace.gz │ │ │ ├── multi2.trace.gz │ │ │ ├── multi3.trace.gz │ │ │ ├── ps.trace.gz │ │ │ ├── scan.trace.gz │ │ │ ├── sprite.trace.gz │ │ │ └── zigzag.trace.gz │ │ │ └── scarab │ │ │ ├── prods.trace.20160808T073231Z.xz │ │ │ ├── recs.trace.20160808T073231Z.xz │ │ │ └── scarab-recs.trace.xz │ │ └── reference.conf │ └── test │ └── java │ └── com │ └── github │ └── benmanes │ └── caffeine │ └── cache │ └── simulator │ └── admission │ └── bloom │ ├── MembershipTest.java │ └── package-info.java └── wiki ├── design ├── design.png └── design.vsdx ├── efficiency ├── adaptive.png ├── database.png ├── glimpse.png ├── oltp.png ├── search.png └── wikipedia.png ├── logo.png ├── simulator └── hit_rate.png └── throughput ├── compute.png ├── concurrent_linked_stack.png ├── read.png ├── readwrite.png ├── single_consumer_queue.png └── write.png /.codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | 3 | coverage: 4 | round: nearest 5 | status: 6 | project: 7 | default: 8 | informational: true 9 | patch: 10 | default: 11 | informational: true 12 | -------------------------------------------------------------------------------- /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | [[analyzers]] 4 | name = "java" 5 | enabled = true 6 | 7 | [analyzers.meta] 8 | runtime_version = "11" 9 | 10 | [[analyzers]] 11 | name = "secrets" 12 | enabled = true 13 | 14 | [[analyzers]] 15 | name = "shell" 16 | enabled = true 17 | 18 | [[analyzers]] 19 | name = "test-coverage" 20 | enabled = true 21 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 2 6 | end_of_line = lf 7 | indent_style = space 8 | max_line_length = 100 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.{bat,cmd}] 13 | end_of_line = crlf 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | gradlew text eol=lf 3 | gradlew.bat text eol=crlf 4 | mvnw.cmd text eol=crlf 5 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | If you discover a security issue, please use GitHub's mechanism for [privately reporting a vulnerability][]. 4 | Under the main repository's [security tab][], click "Report a vulnerability" to open the advisory form. 5 | 6 | Thanks for helping make everyone safer. 7 | 8 | [privately reporting a vulnerability]: https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability 9 | [security tab]: https://github.com/ben-manes/caffeine/security 10 | -------------------------------------------------------------------------------- /.github/actions/spelling/advice.md: -------------------------------------------------------------------------------- 1 | 2 |
If the flagged items are :exploding_head: false positives 3 | 4 | If items relate to a ... 5 | * binary file (or some other file you wouldn't want to check at all). 6 | 7 | Please add a file path to the `excludes.txt` file matching the containing file. 8 | 9 | File paths are Perl 5 Regular Expressions - you can [test]( 10 | https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. 11 | 12 | `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( 13 | ../tree/HEAD/README.md) (on whichever branch you're using). 14 | 15 | * well-formed pattern. 16 | 17 | If you can write a [pattern]( 18 | https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns 19 | ) that would match it, 20 | try adding it to the `patterns.txt` file. 21 | 22 | Patterns are Perl 5 Regular Expressions - you can [test]( 23 | https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. 24 | 25 | Note that patterns can't match multiline strings. 26 | 27 |
28 | 29 | 30 | :steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling, 31 | please merge to your PR's base branch to get the version configured for your repository. 32 | -------------------------------------------------------------------------------- /.github/actions/spelling/allow.txt: -------------------------------------------------------------------------------- 1 | github 2 | https 3 | ssh 4 | ubuntu 5 | workarounds 6 | -------------------------------------------------------------------------------- /.github/actions/spelling/block-delimiters.list: -------------------------------------------------------------------------------- 1 | # Public Keys 2 | -----BEGIN PUBLIC KEY----- 3 | -----END PUBLIC KEY----- 4 | 5 | # Private Keys 6 | -----BEGIN PRIVATE KEY----- 7 | -----END PRIVATE KEY----- 8 | 9 | # RSA Private Key 10 | -----BEGIN RSA PRIVATE KEY----- 11 | -----END RSA PRIVATE KEY----- 12 | 13 | # GPG Public Key 14 | -----BEGIN PGP PUBLIC KEY BLOCK----- 15 | -----END PGP PUBLIC KEY BLOCK----- 16 | 17 | # GPG Signature 18 | -----BEGIN PGP SIGNATURE----- 19 | -----END PGP SIGNATURE----- 20 | 21 | # Certificates 22 | -----BEGIN CERTIFICATE----- 23 | -----END CERTIFICATE----- 24 | 25 | # All Contributors 26 |