OOME 属于通常您不应该从中恢复的错误类别。但是如果它被埋在一个线程中,或者有人捕获了它,应用程序就有可能进入一个它没有退出但没有用的状态。即使面对使用可能愚蠢地 try catch Throwable 或 Error/OOME 的库,如何防止这种情况的任何建议? (即您无权直接修改源代码)
最佳答案
解决方案:
在较新的 JVM 上:
-XX:+ExitOnOutOfMemoryError
to exit on OOME, or to crash:
-XX:+CrashOnOutOfMemoryError
在旧版本上:
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
定义:当第一次抛出 OutOfMemoryError 时运行用户定义的命令。 (在 1.4.2 更新 12、6 中引入)
见 http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
杀死正在运行的进程的例子:
-XX:OnOutOfMemoryError="kill -9 %p"
关于java - 即使坏人试图捕获它,我如何在任何 OutOfMemoryException 上使 JVM 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871278/