捕获内存不足错误后如何执行commands/scripts?

How to execute commands/scripts after catching out of memory error?

我在 JVM 中的堆内存有限,我不能增加它,因为它是一个嵌入式设备。发生内存不足错误后,我怎么想执行一些日志记录脚本。我该怎么做?

这是一段小代码,您可以从中获取所需的数据。

实际上几乎不可能捕捉到 JVM 将继续 "Out Of Memory"。

执行此操作的唯一方法应该是检查 "Free Memory" 是否在运行时变为 0,但这样做可能非常繁重,因此您很容易达到 "Out Of Memory"。

int mb = 1024*1024;

//Getting the runtime reference from system
Runtime runtime = Runtime.getRuntime();

//Print used memory
System.out.println("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory()) / mb);

//Print free memory
System.out.println("Free Memory:" + runtime.freeMemory() / mb);

//Print total available memory
System.out.println("Total Memory:" + runtime.totalMemory() / mb);

//Print Maximum available memory
System.out.println("Max Memory:" + runtime.maxMemory() / mb);

您可以在启动 JVM 时设置一个 java 选项标志,它会在发生 OOM 时执行给定的脚本。

-XX:OnOutOfMemoryError=string 用于指定在首次抛出 OutOfMemoryError 时要执行的命令或脚本