2016-08-01 1 views
0

J'utilise la politique LRU d'Ehcache 2.8.8 dans ma webapp, lorsqu'il n'y a pas de -Dnet. sf.ehcache.use.classic.lru = true Ehcache respecte mon paramètre maxBytesLocalHeap; mais ce n'est pas le cas lorsque la propriété système est définie.Pourquoi Ehcache 2.8.8 ignore mon paramètre maxBytesLocalHeap lors de l'utilisation de -Dnet.sf.ehcache.use.classic.lru = true

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

Et en classe 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); 
} 

donc je suppose que MaxEntriesLocalHeap a un effet? Est-il possible de définir comme propriété système jvm?

Répondre

0

Lorsque vous demandez explicitement classic LRU vous obtenez en fait une ancienne version de code interne qui a été préservée car certains utilisateurs dépendent de son comportement. Cela signifie que vous n'êtes pas en mesure d'utiliser les fonctionnalités introduites après cela, notamment en dimensionnant le niveau de segment de mémoire en octets.

Donc, vous avez raison, seul maxEntriesLocalHeap vous permettra de dimensionner le niveau de segment de mémoire. Et cela ne peut pas être défini via une propriété système.

+0

Y a-t-il une pénalité à choisir une LRU classique? Quelle est la principale différence entre DiskStore et MemoryStore? – user1532146

+0

Lorsque vous utilisez DiskStore, cela signifie-t-il qu'Ehcache utilisera un disque local? Si oui, à quelle fréquence l'utilise-t-elle? Et combien d'espace doit être préparé dans le disque local? – user1532146

+0

Quelle est la meilleure solution quand je veux seulement sur le magasin de mémoire de tas avec la politique classique d'expulsion de LRU? – user1532146