如何等待垃圾回收器而不是由JVM拋出OutOfMemoryError?是否有一些設置JVM或其他選項(如代碼實踐)?如何配置JVM等待而不是拋出OutOfMemoryError
我不想入侵JVM內存設置或調優GC - 只等待沒有OutOfMemoryError的GC因爲我知道沒有內存泄漏,只是垃圾阻止了新分配。
如何等待垃圾回收器而不是由JVM拋出OutOfMemoryError?是否有一些設置JVM或其他選項(如代碼實踐)?如何配置JVM等待而不是拋出OutOfMemoryError
我不想入侵JVM內存設置或調優GC - 只等待沒有OutOfMemoryError的GC因爲我知道沒有內存泄漏,只是垃圾阻止了新分配。
恐怕你的問題沒有多大意義。
OutOfMemoryException通常在之後GC已經運行並且在回收足夠的內存方面沒有成功。等待GC再次運行不太可能有所幫助。如果它沒有幫助,結果是你的應用程序將凍結。
此外,沒有辦法做到這一點。
您可以調整JVM何時放棄並拋出OOM的閾值,但這是JVM在檢測到垃圾回收沒有完成任何事情時所做的設計。請注意,由於時序不正確或僅僅因爲您創建了很多對象,JVM不會拋出OOM。它會檢測到它已經重複運行GC並且GC沒有釋放任何大量的內存。
一些可能性:
最後,運行一個分析器來查看您正在使用的內存。任何程序的第一次迭代幾乎總是有非常低的成果來清理。