以下是我需要解決的情況。我有兩個解決方案。在Java中查找內存使用情況
我需要維護從數據庫中獲取的數據的緩存,以便在Swing GUI上顯示。 每當我的JVM內存超過其分配內存的70%時,我需要警告用戶過度使用。一旦JVM內存使用率超過80%,那麼我必須停止所有的數據庫查詢並清理作爲用戶操作一部分獲取的現有緩存並通知用戶。在清理過程中,我將手動處理刪除某些基於某些規則的數據並指示JVM進行GC。每當GC發生時,如果內存清理並達到分配內存的60%,則需要重新啓動所有數據庫處理並將控制權交還給用戶。
爲了檢查JVM內存統計信息,我找到了以下兩種解決方案。無法確定哪個是最好的方式以及爲什麼。
Runtime.freeMemory() - 創建線程運行每10秒並檢查可用內存,如果內存超過提到的限制,必要的彈出窗口將親密用戶並調用方法來制止的操作和釋放記憶。
MemoryPoolMXBean.getUsage() - Java 5引入了JMX以在運行時獲取內存快照。在,JMX我不能使用閾值通知,因爲它只會在內存達到/超過給定的閾值時通知。唯一使用的方法是在MemoryMXBean中輪詢並檢查一段時間內的內存統計信息。
在使用輪詢的情況下,對我來說這兩種實現看起來都是一樣的。
請建議的方法的優點,如果有任何其他替代品/方法使用的任何更正。
IMO,這並不完全正常。這些參數可以調整(池大小,完整的GC間隔等) – 2009-02-17 07:36:51