我有一个程序有时会抛出OOME,我知道我可以设置JVM选项中的一个标志,并且每当某个错误/异常出现时(例如OOME),它就会调用我写的脚本。 该脚本会给用户一个通知,并会用不同的参数调用该程序,所以它不会再次获得OOME。如何捕捉JVM中的OutOfMemoryError,并在脚本被捕获时运行脚本?
没有人知道如何设置此标志?我需要设置什么JVM选项? 我在网上随处看,找不到答案。
请帮帮我! 谢谢, 埃
我有一个程序有时会抛出OOME,我知道我可以设置JVM选项中的一个标志,并且每当某个错误/异常出现时(例如OOME),它就会调用我写的脚本。 该脚本会给用户一个通知,并会用不同的参数调用该程序,所以它不会再次获得OOME。如何捕捉JVM中的OutOfMemoryError,并在脚本被捕获时运行脚本?
没有人知道如何设置此标志?我需要设置什么JVM选项? 我在网上随处看,找不到答案。
请帮帮我! 谢谢, 埃
-XX:OnOutOfMemoryError = “CMD ARGS; CMD ARGS”
来源:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#DebuggingOptions
哇,那个看起来很有用,我现在就去看看。谢谢:) – Aye 2010-09-29 11:45:55
我发现了一个建议,在forum:赶上像直接在应用程序的OOME(主要的,假设你是单线程的),并为此在catch处理:
catch (OutOfMemoryError not_again) {
System.gc();
System.runFinalization();
System.gc();
System.out.println("Your error message");
}
清理堆可能释放只是足够的内存来产生一个错误messag在临终前。
谢谢,但应用程序非常稀疏,我不想在里面捕捉它,我更喜欢从JVM本身调用.dat文件 – Aye 2010-09-29 11:45:26
人们会认为JVM会在投掷之前尝试几轮GC OOME本身;这并不能保证真的能做很多事情。 – 2010-09-29 12:10:48
在命令提示符处键入'java -X'。您将获得所有扩展选项的列表。可能有帮助。 – 2010-09-29 11:29:32