Java虚拟机六 堆溢出的处理

    在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.stylefeng.guns.rest.NewSizeDemo.main(NewSizeDemo.java:10)

    一旦发生这种问题,系统就会被迫退出。

    Java虚拟机提供了参数 -XX:+HeapDumpOnOutOfMemoryError ,使用该参数可以在内存溢出时导出整个堆信息。可以使用参数 -XX:HeapDumpPath,指定导出堆的存放路径。

     使用如下命令将当前的堆导出,并保存到D:/a.dump文件下,使用MAT工具打开该文件进行分析。 

-Xmx20m -Xms20m -Xmn7m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

     除了在发生OOM时可以导出堆信息外,虚拟机还允许在发生错误时执行一个脚本文件,用于奔溃程序的自救、报警或通知。

     准备printstack.bat脚本如下:

D:/tools/jdk/bin/jstack -F %1 > D:/a.txt

     以上脚本会导出给定Java虚拟机进程的线程信息,保存到a.txt文件中。

原文地址:https://www.cnblogs.com/taiguyiba/p/9767696.html