2012-01-12 44 views
9
  1. ehcache的2.5
  2. timeToIdleSeconds =「1800」(30分鐘),所以我希望元件之後的是最後一個元素的使用後空閒
  3. 30分鐘30分鐘逐出我仍然可以看到高速緩存充滿元素
  4. 強制GC並採取堆轉儲顯示,該元素仍在內存中
  5. getSize()返回正數並且getKeys()按預期返回鍵(getKeys()不檢查元件過期)
  6. 獲取特定元素,但結果爲NULL值,表示已過期。
  7. getKeysWithExpiryCheck()顯示,該緩存爲空,並且所有元素都被刪除並被驅逐
  8. 強制GC並採取堆轉儲顯示,該元素收集內存不足。ehcache的不從存儲器上驅逐除去元素

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

從上面我看,那的Ehcache使印象,即元素已過期,這可能導致我的代碼邏輯來刷新他們,但引擎蓋內存下,直到與元素污染,直到我把特定的元素或getKeysWithExpiryCheck (),它不讓我使用ehcache作爲有效的內存管理器

如何在timeToIdleSeconds時間之後使元素成爲GS?如果在timeToIdleSeconds之上不使用元素,我希望清理內存。

把元素時,邁克爾

回答

18

的Ehcache只會驅逐元素和緩存高於閾值。否則,訪問這些過期的元素將導致它們過期(並從Cache中移除)。沒有線程在後臺收集並從緩存中刪除過期的元素。即使我不推薦它,因爲這會影響Cache的性能(但是如果內存使用更重要,這可能是一個公平的折衷),你可以有一個後臺線程定期執行getKeysWithExpiryCheck()。

此外,如果內存消耗是一個重點,您可能需要查看新的Ehcache 2.5,它可以讓您(甚至在CacheManager級別)指定應該使用多少堆......