Skip to content

Memory overhead zh CN

Ben Manes edited this page Aug 31, 2025 · 5 revisions

MemoryBenchmark的估算基于Java Agent for Memory MeasurementsJava Object Layout计算运行时大小。该大小可能受JVM确定的压缩引用、对象填充等因素影响。

通过分叉Java 5的ConcurrentHashMap,Guava凭借逐条目优化略占优势。当使用弱引用和软引用缓存时,这种优势尤为显著。由于装饰了Java 8的ConcurrentHashMap,Caffeine必须保留额外字段才能移除被回收的条目。

Caffeine可能根据使用情况延迟初始化或动态调整其内部数据结构的大小。这减少了内存占用,仅在满足使用需求(如吞吐量)时才分配额外内存。

无界

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 262,288 bytes 32 bytes (32 aligned) 524,504 bytes 32 bytes (32 aligned)
Guava 263,008 bytes 48 bytes (48 aligned) 263,200 bytes 48 bytes (48 aligned)

容量有界

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 787,728 bytes 64 bytes (64 aligned) 787,848 bytes 64 bytes (64 aligned)
Guava 263,360 bytes 64 bytes (64 aligned) 263,608 bytes 64 bytes (64 aligned)

容量有界 & 根据访问时间过期

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 787,760 bytes 72 bytes (72 aligned) 787,904 bytes 72 bytes (72 aligned)
Guava 263,360 bytes 64 bytes (64 aligned) 263,608 bytes 64 bytes (64 aligned)

容量有界 & 根据写入时间过期

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 787,792 bytes 80 bytes (80 aligned) 787,936 bytes 80 bytes (80 aligned)
Guava 263,520 bytes 80 bytes (80 aligned) 263,776 bytes 80 bytes (80 aligned)

容量有界 & 根据写入时间刷新

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 787,768 bytes 72 bytes (72 aligned) 787,912 bytes 72 bytes (72 aligned)
Guava 263,376 bytes 80 bytes (80 aligned) 263,656 bytes 80 bytes (80 aligned)

权重有界

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 525,624 bytes 72 bytes (72 aligned) 525,672 bytes 72 bytes (72 aligned)
Guava 263,376 bytes 64 bytes (64 aligned) 263,600 bytes 64 bytes (64 aligned)

根据访问时间过期

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,288 bytes 72 bytes (72 aligned) 263,432 bytes 72 bytes (72 aligned)
Guava 263,360 bytes 64 bytes (64 aligned) 263,608 bytes 64 bytes (64 aligned)

根据写入时间过期

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,256 bytes 72 bytes (72 aligned) 263,424 bytes 72 bytes (72 aligned)
Guava 263,168 bytes 64 bytes (64 aligned) 263,416 bytes 64 bytes (64 aligned)

根据访问时间 & 写入时间过期

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,336 bytes 88 bytes (88 aligned) 263,480 bytes 88 bytes (88 aligned)
Guava 263,520 bytes 80 bytes (80 aligned) 263,776 bytes 80 bytes (80 aligned)

弱引用Keys

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,272 bytes 72 bytes (72 aligned) 263,392 bytes 88 bytes (88 aligned)
Guava 263,216 bytes 40 bytes (40 aligned) 263,480 bytes 56 bytes (56 aligned)

弱引用Values

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,264 bytes 64 bytes (64 aligned) 263,384 bytes 80 bytes (80 aligned)
Guava 263,216 bytes 48 bytes (48 aligned) 263,480 bytes 64 bytes (64 aligned)

弱引用Keys & Values

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,312 bytes 80 bytes (80 aligned) 263,432 bytes 112 bytes (112 aligned)
Guava 263,392 bytes 40 bytes (40 aligned) 263,584 bytes 72 bytes (72 aligned)

弱引用 Keys & 软引用 Values

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,312 bytes 88 bytes (88 aligned) 263,432 bytes 120 bytes (120 aligned)
Guava 263,392 bytes 48 bytes (48 aligned) 263,656 bytes 80 bytes (80 aligned)

软引用Values

Cache Baseline (MemoryMeter) Per Entry (MemoryMeter) Baseline (ObjectLayout) Per Entry (ObjectLayout)
Caffeine 263,264 bytes 72 bytes (72 aligned) 263,384 bytes 88 bytes (88 aligned)
Guava 263,216 bytes 56 bytes (56 aligned) 263,480 bytes 72 bytes (72 aligned)

Clone this wiki locally