我在我的webapp中使用Ehcache 2.8.8的LRU策略, 当没有-Dnet.sf.ehcache.use.classic.lru = true时 Ehcache尊重我的maxBytesLocalHeap参数; 但是在设置系统属性时它不会这样做。
在类缓存中:
if (useClassicLru && onfiguration.getMemoryStoreEvictionPolicy().
equals(MemoryStoreEvictionPolicy.LRU)) {
Store disk = createDiskStore();
store = new LegacyStoreWrapper(new LruMemoryStore(this, disk),
disk, registeredEventListeners, configuration);
} else {
if (configuration.isOverflowToDisk()) {
store = DiskStore.createCacheStore(this, onHeapPool,
onDiskPool);
} else {
store = MemoryStore.create(this, onHeapPool);
}
}
在LruMemoryStore课程中:
public LruMemoryStore(Ehcache cache, Store diskStore) {
status = Status.STATUS_UNINITIALISED;
this.maximumSize =
cache.getCacheConfiguration().getMaxEntriesLocalHeap();
this.cachePinned =
determineCachePinned(cache.getCacheConfiguration());
this.elementPinningEnabled =
!cache.getCacheConfiguration().isOverflowToOffHeap();
this.cache = cache;
this.diskStore = diskStore;
if (cache.getCacheConfiguration().isOverflowToDisk()) {
evictionObserver = null;
} else {
evictionObserver =
StatisticBuilder.operation(EvictionOutcome.class).
named("eviction").of(this).build();
}
map = new SpoolingLinkedHashMap();
status = Status.STATUS_ALIVE;
copyStrategyHandler = MemoryStore.getCopyStrategyHandler(cache);
}
所以我猜只有MaxEntriesLocalHeap有效?
是否可以将其设置为jvm系统属性?
答案 0 :(得分:0)
当您明确请求经典LRU 时,您实际上会获得一个旧版本的内部代码,因为某些用户依赖于其行为而保留该代码。
这意味着您实际上无法使用此后引入的功能,包括以字节为单位调整堆层大小。
所以你是对的,只有maxEntriesLocalHeap
允许你调整堆层的大小。这不能通过系统属性设置。