java - 即使坏人试图捕获它,我如何在任何 OutOfMemoryException 上使 JVM 退出

标签 java jvm

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/

相关文章:

java - MapReduce:增加并发映射器任务的数量

java - JVM - 在没有显式调用的情况下打印堆栈跟踪

java - Citrus Framework-来自SUT的无法解释的HTTP 503

Java Lambda : How it works in JVM & is it OOP?

java - 如何解密由 PHP 方法 openssl_encryp aes-256-cbc 加密的 Java 数据?

java - 彭博安全查找请求

java - 为什么switch on String会编译成两个switch

Java CMS GC,系统空闲时GC线程占用CPU

java - 如何确保类加载器可以访问临时 jar 文件

java - Spark Java - 无法获取 java.lang.String 的正确类标签