2012-01-12 6 views
9
  1. EHCache 2,5
  2. timeToIdleSeconds = "1800" (30 minuti), quindi mi aspetto elemento di espellere dopo 30 minuti di inattività
  3. 30 minuti dopo l'ultimo utilizzo Element Posso ancora vedere che la cache è piena di elementi
  4. Forzare GC e fare lo heap dump show, quegli elementi sono ancora nella memoria
  5. getSize() restituisce il numero positivo e getKeys() restituisce le chiavi come previsto (getKeys() non non verificare scadenza elementi)
  6. ottenendo un elemento particolare, sebbene produca un valore NULL, il che significa che è scaduto.
  7. getKeysWithExpiryCheck() mostra, che cache è vuota e tutti gli elementi exired e sgomberato
  8. forzatura GC e tenendo mucchio spettacoli ribaltabili, che gli elementi raccolti dalla memoria.EHCache non rimuove elemento dalla memoria sul sfratto

    maxEntriesLocalHeap="10000" 
    eternal="false" 
    statistics="true" 
    overflowToDisk="false" 
    timeToIdleSeconds="1800" 
    memoryStoreEvictionPolicy="LFU" 
    transactionalMode="off" 
    

Dall'alto vedo, che EHCache fare impressione, che gli elementi sono scaduti che può portare mia logica codice per rinfrescare loro ma sotto la memoria cofano è sino inquinati da elementi fino chiamo particolare elemento o getKeysWithExpiryCheck(), che non mi consente di utilizzare ehcache come gestore di memoria efficace

Come rendere l'elemento GS dopo il timeToIdleSeconds time? Voglio che la memoria venga pulita se gli elementi non vengono utilizzati sopra timeToIdleSeconds.

Michael

risposta

18

EHCache sarà sfrattare solo elementi quando mette gli elementi e la cache è al di sopra della soglia. In caso contrario, l'accesso a quegli elementi scaduti comporterà la loro scadenza (e rimosso dalla cache). Non esiste un thread che raccolga e rimuova gli elementi scaduti dalla cache in background. Anche se non lo consiglierei, poiché ciò influenzerebbe le prestazioni della cache (ma se l'utilizzo della memoria è più importante, potrebbe essere un compromesso equo), è possibile avere un thread in background che esegue getKeysWithExpiryCheck() su un intervallo regolare.

Anche se il consumo di memoria è un punto importante, si potrebbe desiderare di esaminare la nuova EHCache 2.5, che consente di (anche a livello CacheManager) specificare fino a quanto mucchio dovrebbe essere usato ...