2013-07-31 38 views
1

我一直在玩緩存對象(首先創建自己的緩存,結果是一個穩定的實現,但效率非常低),然後試圖使用Memcached。對Java和ScheduledFuture對象使用memcached

雖然memcached的工作很好,但我遇到了一個問題。

我如何用我的目標如下:

  • 我從數據庫中讀取數據到一個對象,然後將對象存儲在memcached的。
  • 每隔幾分鐘我會從memcached中檢索對象,從數據庫或memcached中的其他對象中檢索任何其他數據,使用任何新的/相關數據更新對象,然後將對象存儲回memcached。
  • 需要查看的對象從memcached中提取,打包併發送到客戶端應用程序以供顯示。

這很有效,除非在memcached中創建 - 存儲 - 更新 - 查看的對象數量變高。 Java/Tomcat-jvm似乎並沒有對我從memcached中取出的對象「足夠快」進行垃圾收集,而且虛擬機內存不足。

我只限於8GB的內存(如果可以的話 - 最好使用memcached),所以我的問題是,有沒有一種解決方案可以防止JVM內存使用擴展如此之快(或調整垃圾收集器)? (PS我已經考慮使用谷歌的Guava緩存,但這限制了我的併發選項,例如,如果我必須重新啓動tomcat,並且同時使用Guava和memcached似乎是我想要避免的重複類型可能)

- Hein。

回答

0

垃圾收集器不能「太慢」並且內存不足。在拋出OutOfMemoryError之前,垃圾回收器保證運行。只有當它不能釋放足夠的內存時纔會拋出錯誤。

您應該使用探查器來查看您是否有內存泄漏,或者您是否掛在太多的對象上。

之後您可能想要調整GC以提高性能,請參閱此處的示例:GC tuning