内存开销测试通过Java Agent for Memory Measurements来计算运行时内存。这个大小可能受到引用压缩,对象填充等JVM因素影响。这个基准测试可以通过gradle memoryOverhead
来执行内存基准测试。
通过在Java 5的ConcurrentHashMap上进行分支开发,Guava在每个缓存元素的所消耗的内存进行了优化。当使用软引用和弱饮用的时候这点优势会更加明显。因为Caffeine 是基于Java 8的ConcurrentHashMap进行封装的,需要额外的字段去移除一个被回收的字段。
Caffeine将会基于用法懒加载或是动态调整器内部的数据结构大小。这减少了内存开销并可以在使用量增加的时候(比如吞吐量)方便追加内存占用。
Cache |
Baseline |
Entry |
Caffeine |
264 bytes |
54 bytes (56 aligned) |
Guava |
1,032 bytes |
58 bytes (64 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,112 bytes |
74 bytes (80 aligned) |
Guava |
1,384 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,152 bytes |
82 bytes (88 aligned) |
Guava |
1,384 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,176 bytes |
90 bytes (96 aligned) |
Guava |
1,544 bytes |
90 bytes (96 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,168 bytes |
90 bytes (96 aligned) |
Guava |
27,200 bytes (?) |
90 bytes (96 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,120 bytes |
82 bytes (88 aligned) |
Guava |
1,376 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,008 bytes |
82 bytes (88 aligned) |
Guava |
1,384 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,008 bytes |
82 bytes (88 aligned) |
Guava |
1,192 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
1,048 bytes |
98 bytes (104 aligned) |
Guava |
1,544 bytes |
90 bytes (96 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
560 bytes |
98 bytes (104 aligned) |
Guava |
1,240 bytes |
66 bytes (72 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
560 bytes |
98 bytes (104 aligned) |
Guava |
1,240 bytes |
74 bytes (80 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
616 bytes |
130 bytes (136 aligned) |
Guava |
1,416 bytes |
82 bytes (88 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
616 bytes |
146 bytes (152 aligned) |
Guava |
1,416 bytes |
98 bytes (104 aligned) |
Cache |
Baseline |
Entry |
Caffeine |
560 bytes |
114 bytes (120 aligned) |
Guava |
1,240 bytes |
90 bytes (96 aligned) |