2016-08-01 47 views
0

benutze Ehcache 2.8.8 LRU-Richtlinie in meiner Webapp, , wenn kein -Dnet ist. sf.ehcache.use.classic.lru = true Ehcache respektiert meinen Parameter maxBytesLocalHeap; , aber dies geschieht nicht, wenn die Systemeigenschaft festgelegt ist.Warum Ehcache 2.8.8 mein maxBytesLocalHeap Parameter ignorieren, wenn ich -Dnet.sf.ehcache.use.classic.lru = true

In der Klasse Cache:

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); 
    } 
} 

Und in der Klasse 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); 
} 

Also ich denke, nur hat MaxEntriesLocalHeap Effekt?

Ist es möglich, es als jvm-Systemeigenschaft festzulegen?

Antwort

0

Wenn Sie explizit classic LRU anfordern, erhalten Sie tatsächlich eine ältere Version des internen Codes, der beibehalten wurde, da einige Benutzer von seinem Verhalten abhängig sind.

Das bedeutet, dass Sie Funktionen, die danach eingeführt werden, effektiv nicht verwenden können, einschließlich der Größe der Heapschicht in Byte.

Sie haben also Recht, nur maxEntriesLocalHeap können Sie die Größe der Heap-Ebene. Und das kann nicht über eine Systemeigenschaft eingestellt werden.

+0

Gibt es eine Strafe, um klassische LRU zu wählen? Was ist der Hauptunterschied zwischen DiskStore und MemoryStore? – user1532146

+0

Wenn Sie DiskStore verwenden, bedeutet das, dass Ehcache die lokale Festplatte verwendet? Wenn ja, wie oft benutzt es es? Und wie viel Speicherplatz muss in der lokalen Festplatte vorbereitet werden? – user1532146

+0

Was ist die beste Lösung, wenn ich nur Heap-Speicher mit klassischen LRU Räumungsrichtlinie wollen? – user1532146