我有一个有时会抛出 OOME 的程序,我知道 JVM 选项中有一个可以设置的标志,并且每当出现某个错误/异常(例如 OOME)时,它都会调用我编写的脚本。该脚本将给用户一个通知,并使用不同的参数调用程序,这样它就不会再次获得 OOME。
有谁知道如何设置这个标志?我需要设置哪些 JVM 选项?我在网上到处找,找不到答案。
请帮帮我!谢谢,是的
我有一个有时会抛出 OOME 的程序,我知道 JVM 选项中有一个可以设置的标志,并且每当出现某个错误/异常(例如 OOME)时,它都会调用我编写的脚本。该脚本将给用户一个通知,并使用不同的参数调用程序,这样它就不会再次获得 OOME。
有谁知道如何设置这个标志?我需要设置哪些 JVM 选项?我在网上到处找,找不到答案。
请帮帮我!谢谢,是的
-XX:OnOutOfMemoryError="cmd args;cmd args"
From: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#DebuggingOptions
我在论坛中找到了一个建议:在您的应用程序中捕获 OOME(如直接在 main 中,假设您是单线程的)并在 catch 处理程序中执行此操作:
catch (OutOfMemoryError not_again) {
System.gc();
System.runFinalization();
System.gc();
System.out.println("Your error message");
}
清理堆可能会释放足够的内存以在死前产生最后一条错误消息。