更新时间: 2018-07-20 17:19:24#JVM OOM & JAVA finalizer 引发的 OOM & Thread.stop#Abstract这个文章里面会描述以下几件事情: 1. 在Java中有OOM应该怎么分析?2. Java finalizer为什么会引发OOM?3. 为什么不能使用Thread.stop #Java中发生OOM应该怎么分析大多数时候Java都做得足够好. 但是没办法还是有可能会有OutOfMemoryError(OOM) 发生. 那么我们应该怎么分析一个OOM错误呢? #拿到内存转储方式1:自动转储 当OOM发生时, Java可以自动尝试(best effort)生成一个堆转储.只需要你在启动参数中加上如下参数: 1 -XX:+HeapDumpOnOutOfMemoryError 这种方式生成的文件会在java的工作目录里面, 名字叫 java_pidXXX.hprof 方式2:手动转储 有时候你已经可以发现某个Java进程占用了很多内存了. 是时候手动导出一个堆内存了.使用jmap. jmap是一个jdk自带的工具, 在jdk/bin下面, 1 2 jmap -dump:format=b,file=heap.bin jmap -F -dump:format=b,file=heap.bin 强制导出 有一点很重要: 出于兼容性考虑,一定使用和你运行JRE**运行版本相同**的jmap工具. http://www.importnew.com/25522.html 再推荐个工具, Jstack分析 IBM Thread and Monitor Dump Analyzer for Java