Почему Ehcache 2.8.8 игнорирует мой параметр maxBytesLocalHeap при использовании -Dnet.sf.ehcache.use.classic.lru=true

Я использую политику LRU Ehcache 2.8.8 в своем веб-приложении, когда нет -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?


person user1532146    schedule 01.08.2016    source источник


Ответы (1)


Когда вы явно запрашиваете классический LRU, вы фактически получаете старую версию внутреннего кода, которая была сохранена, поскольку некоторые пользователи зависят от его поведения.

Это означает, что вы фактически не сможете использовать функции, появившиеся после этого, включая определение размера уровня кучи в байтах.

Так что вы правы, только maxEntriesLocalHeap позволит вам определить размер кучи. И это нельзя установить через системное свойство.

person Louis Jacomet    schedule 02.08.2016
comment
Есть ли штраф за выбор классического LRU? В чем основное различие между DiskStore и MemoryStore? - person user1532146; 02.08.2016
comment
Означает ли это, что при использовании DiskStore Ehcache будет использовать локальный диск? Если да, то как часто он его использует? И сколько места нужно подготовить на локальном диске? - person user1532146; 02.08.2016
comment
Какое лучшее решение, когда мне нужно только хранилище кучи памяти с классической политикой выселения LRU? - person user1532146; 02.08.2016