-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Memory overhead zh CN
Ben Manes edited this page Aug 31, 2025
·
5 revisions
MemoryBenchmark的估算基于Java Agent for Memory Measurements和Java 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) |
| 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) |
| 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) |
| 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) |
| 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) |
| 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) |

