如何等待垃圾收集器而不是JVM抛出OutOfMemoryError?是否有一些JVM或其他选项的设置(如代码实践)?
我不想进入JVM内存设置或调整GC - 只等待没有OutOfMemoryError的GC因为我知道没有内存泄漏,只是垃圾阻止了新的分配。
答案 0 :(得分:4)
我担心,你的问题没有多大意义。
在运行GC之后,通常会抛出一个OutOfMemoryException ,并且在回收足够的内存以便您继续操作时失败。等待GC(再次)运行不太可能有所帮助。如果它没有帮助,结果是你的应用程序将冻结。
此外,没有办法做到这一点。
答案 1 :(得分:3)
您可以调整JVM放弃并抛出OOM的阈值,但这是JVM在检测到垃圾收集未完成任何操作时通过设计进行的操作。请注意,JVM不会因为时间错误而抛出OOM,或者仅因为您创建了大量对象。它会检测到它已反复运行GC并且GC没有释放任何大量内存。
一些可能性:
最后,运行一个分析器来查看你正在使用的内存。任何程序的第一次迭代几乎总是有很大的低成果来清理。