【问题标题】:How to catch OutOfMemoryError in JVM and run a script if it's caught?如何在 JVM 中捕获 OutOfMemoryError 并在捕获时运行脚本?
【发布时间】:2011-04-18 18:44:02
【问题描述】:

我有一个有时会抛出 OOME 的程序, 我知道在 JVM 选项中有一个可以设置的标志,并且每当出现某个错误/异常(例如 OOME)时,它都会调用我编写的脚本。 该脚本将给用户一个通知,并使用不同的参数调用程序,这样它就不会再次获得 OOME。

有谁知道如何设置这个标志?我需要设置哪些 JVM 选项? 我在网上到处找答案。

请帮帮我! 谢谢, 是的

【问题讨论】:

  • 在命令提示符下键入“java -X”。您将获得所有扩展选项的列表。可能会有所帮助。

标签: java jvm out-of-memory jvm-arguments


【解决方案1】:

【讨论】:

  • 哇,那个看起来很有用,我现在去看看。谢谢:)
【解决方案2】:

我在 forum 中找到了一个建议:在您的应用程序中捕获 OOME(就像直接在 main 中,假设您是单线程的)并在 catch 处理程序中执行此操作:

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

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

【讨论】:

  • 谢谢,但应用程序非常稀疏,我不想在里面捕获它我更喜欢从 JVM 本身调用 .dat 文件
  • 人们会认为JVM会在自己抛出OOME之前尝试几轮GC;这并不能保证真的能做很多事情。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2018-01-18
  • 2018-01-06
  • 2011-10-31
相关资源
最近更新 更多