如何在JVM中捕获OutOfMemoryError并在捕获时运行脚本?

10

我有一个程序,有时会抛出 OOME 错误,我知道在JVM选项中有一个标志可以设置,每当某个错误/异常出现(例如 OOME),它就会调用我编写的脚本。

这个脚本将向用户发送通知,并使用不同的参数调用程序,以便它不会再次遇到 OOME 错误。

有谁知道如何设置这个标志吗?我需要设置哪个 JVM 选项?我在网上搜索了所有地方,都找不到答案。

请帮帮我! 谢谢, Aye


1
在命令提示符处输入“java -X”。您将获得所有扩展选项的列表。可能会有所帮助。 - Sagar V
2个回答

15

哇,那个看起来很有用,我现在就去看看。谢谢 :) - Aye

-4

我在论坛中找到了一个建议:在应用程序中捕获OOME(例如直接在主线程中,假设您是单线程),并在catch处理程序中执行以下操作:

catch (OutOfMemoryError not_again) {
  System.gc();
  System.runFinalization();
  System.gc();
  System.out.println("Your error message");
}

清理堆可能会释放足够的内存,在死亡之前产生最后一个错误消息。

谢谢,但是这个应用程序非常稀疏,我不想将其捕获在内部,我更喜欢从JVM本身调用.dat文件。 - Aye
8
有人会认为 JVM 在抛出 OOME 之前会尝试进行几轮垃圾回收,但这并不能保证真的有什么作用。 - matt b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接