-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Memory overhead
The cache and entry objects only require certain fields depending on the configuration options specified when creating the cache. To minimize memory, code generation is used to avoid retaining unnecessary fields.
Estimates were performed using a Java instrumentation agent to calculate the runtime size. The size is may be affected by compressed references, object padding, etc. applied by the JVM. This benchmark may be run using gradle memoryOverhead
which executes MemoryBenchmark.
By forking Java 5's ConcurrentHashMap
, Guava has a slight advantage with per-entry optimizations. This is evident when weak and soft reference caching is used. Caffeine must retain additional fields to remove a collected entry due to decorating a Java 8 ConcurrentHashMap
.
Pending optimizations
Caffeine uses ring buffers to record reads for replaying in batch against the maximum size and expire after access policies. Presently the buffers are fixed to a size optimal for high concurrency. Instead, the buffers should grow dynamically based upon contention so that footprint is minimized.
Cache | Baseline | Entry |
---|---|---|
Caffeine | 400 bytes | 54 bytes |
Guava | 1,136 bytes | 58 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,832 bytes | 74 bytes |
Guava | 1,560 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,944 bytes | 82 bytes |
Guava | 1,560 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,976 bytes | 90 bytes |
Guava | 1,728 bytes | 90 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,968 bytes | 82 bytes |
Guava | 27,472 bytes | 90 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,864 bytes | 74 bytes |
Guava | 1,552 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,904 bytes | 82 bytes |
Guava | 1,560 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 584 bytes | 82 bytes |
Guava | 1,360 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 22,968 bytes | 98 bytes |
Guava | 1,728 bytes | 90 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 432 bytes | 98 bytes |
Guava | 1,416 bytes | 66 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 432 bytes | 98 bytes |
Guava | 1,416 bytes | 74 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 488 bytes | 130 bytes |
Guava | 1,512 bytes | 82 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 488 bytes | 138 bytes |
Guava | 1,584 bytes | 90 bytes |
Cache | Baseline | Entry |
---|---|---|
Caffeine | 432 bytes | 106 bytes |
Guava | 1,416 bytes | 82 bytes |