2016-03-08 63 views
0

我正在使用Hibernate 4.3.11.Final隨附的ehcache版本。我有一個簡單的緩存配置,它看起來像以下:垃圾收集將如何影響存儲在堆上的ehcache元素?

<defaultCache maxElementsInMemory="10000" 
    eternal="false" 
    timeToIdleSeconds="86400" 
    timeToLiveSeconds="86400" 
    overflowToDisk="false" 
    memoryStoreEvictionPolicy="LRU"> 
</defaultCache> 
<cache name="main" /> 

我的問題是,由於內存設置爲堆的一部分,堆得垃圾定期收集,會發生什麼,當一些條目在我的緩存收集垃圾?這些條目是否與緩存中的條目相同?

回答

0

垃圾收集(GC)永遠不會從高速緩存自身引用根路徑的高速緩存中收集條目。

要回答offheap的問題,假設您決定在緩存中有500k映射,每個映射都是10k字節。這相當於將近5GB的緩存數據。數據在運行時會對GC產生影響,因爲它需要圍繞GC執行操作 - 根據GC impl標記,升級和壓縮。因此,offheap通過將對象放置在發生GC的區域之外來解決此問題,以便使應用程序能夠以更小的堆運行,從而減少GC暫停。

所有這一切都不矛盾,它永遠不會刪除緩存條目的GC。這是相反的 - 一旦被驅逐,過期或取代,只要沒有更多的根路徑,前一個映射就可以免費用於GC。

這就是this answer中給出的解釋。

+0

對嗎?這傢伙乞求不同 - http://stackoverflow.com/questions/24346428/garbage-collection-when-ehcache-is-used-for-hibernate-second-level-cache。另外,如果他們沒有被GC收集,爲什麼Terracotta覺得有必要解決這個不存在的「垃圾收集問題」 - http://www.theserverside.com/news/thread.tss?thread_id=60893 。 – Dave

+0

謝謝你的clariciation。雖然我沒有提到堆外,但您提出這是一個有趣的解決方案,以解決ehcache的onheap系統的缺點。但是ehcache的offheap解決方案不是免費的,對吧? – Dave

+0

版本2.x的權利,但即將推出的版本3是免費的。請參閱ehcache.org –