2010-09-29 44 views
8

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

没有人知道如何设置此标志?我需要设置什么JVM选项? 我在网上随处看,找不到答案。

请帮帮我! 谢谢, 埃

+1

在命令提示符处键入'java -X'。您将获得所有扩展选项的列表。可能有帮助。 – 2010-09-29 11:29:32

回答

-3

我发现了一个建议,在forum:赶上像直接在应用程序的OOME(主要的,假设你是单线程的),并为此在catch处理:

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

清理堆可能释放只是足够的内存来产生一个错误messag在临终前。

+0

谢谢,但应用程序非常稀疏,我不想在里面捕捉它,我更喜欢从JVM本身调用.dat文件 – Aye 2010-09-29 11:45:26

+8

人们会认为JVM会在投掷之前尝试几轮GC OOME本身;这并不能保证真的能做很多事情。 – 2010-09-29 12:10:48