假設我有一個有內存泄漏的應用程序。在某些時候,GC會努力清除內存,並會減慢我的應用程序。我知道,如果你設置這個參數爲JVM -XX:-UseGCOverheadLimit它會拋出一個OutOfMemoryException:如何防止垃圾收集器減慢我的應用程序
如果總時間的98%以上都花在垃圾收集和堆小於2%被恢復。
但是,這對我來說還不夠好。因爲即使在這些數字出現之前,我的應用程序也會變得很慢在拋出OutOfMemoryException之前,GC會吸收CPU一段時間。我的目標是在某種程度上很早就認識到如果最可能出現問題,然後拋出OutOfMemoryexception。之後我有一些恢復策略。
好吧,現在我已經發現了這兩個附加參數GCTimeLimit和GCHeapFreeLimit。有了它們,可以調整兩個引用常量(98%和2%)。
我對自己做了一些測試,就像產生內存泄漏並使用這些設置玩的一小段代碼。但我不確定如何找到正確的折衷方案。我的希望是,別人有同樣的問題,並提出了一個合理的解決方案,或者還有一些我還不知道的其他GC開關。
我感覺有點失落,因爲我不是這個話題的專家,而且似乎有很多事情是可以考慮的。
而不是試圖擊敗垃圾回收器,也許你應該修補內存泄漏? – Bueller 2011-12-15 22:42:54
修復內存泄漏似乎並不合理嗎?這看起來像內存泄漏下的滴水盤。 – corsiKa 2011-12-15 22:43:30
哪個JVM?什麼版本? GC調優參數/方法是每個JVM實現所專有的。 – 2011-12-15 22:50:30