当每个字符串都是一个 4MB(总共 400GB)的 Json 时,我尝试使用 EhCache 来存储 100000 个字符串。 (key 是从 1 到 100000 的数字)
为了解决这个问题,我使用了 EhCache 和这个编程配置:
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(<PATH_TO_PERSISTENCE_DIR))
.withCache("session", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class,
ResourcePoolsBuilder.heap(1000)
.disk(600, MemoryUnit.GB)
).withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(20))))
.build();
cacheManager.init();
Cache<Integer, String> sessionCache = cacheManager.getCache("session", Integer.class, String.class);
解决方案是在 ~12GB 之后缓存抛出 OOM 异常并且无法添加新元素。
因为我做错了什么?有我没看到的限制吗? (我的电脑有 32GB 的内存和 ~1TB 的可用空间)