以下是用於測試OOM的測試代碼:

這段代碼非常簡單,其目的就是為了模擬OOM,將其編譯后,通過以下命令運行:
java -Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./oom.out HeapMemUseTest
其中的參數代表的意義為:
-Xmx和-Xms分別是用於指定該Java進程初使化的最小堆內存以及可以使用的最大堆內存的,這里設置為10M
-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath參數分別用於指定發生OOM是否要導出堆以及導出堆的文件路徑
該命令一執行,立即就會發生OOM,並打印如下的日志:

查看當前路徑,oom.out文件已經生成了,該文件就是應用在發生OOM異常時自動導出的堆文件。那我們此時需要對該文件進行分析,因為其中記錄了是什么對象導出了應用程OOM的發生。
分析OOM的工具推薦使用MAT,下載地址為https://projects.eclipse.org/projects/tools.mat,在配置好Java環境的電腦中,直接打開即可,不需要安裝,然后通過MAT打開已經生成的OOM文件oom.out,出現如下提示,選擇“Leak Suspects Report”執行內存泄漏檢查分析:

