java.lang.OutOfMemoryError: Java heap space

本文介绍了一种模拟Java堆内存溢出的方法,并提供了详细的JVM参数配置指导。通过实例演示了如何利用jmap等工具获取内存快照,进一步分析内存溢出原因。

堆内存溢出怎么排查

内存溢出现象

在这里插入图片描述
模拟内存溢出

public class HeadOOM {
    static class OOMObject {

    }

    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<>();
        while (true){
            list.add(new OOMObject());
        }

    }

}

执行main方法时候需要配置对应的jvm参数
在这里插入图片描述

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath= 改成自己的路径

参数说明:-Xms20m -Xmx20m 设置堆内存最大和最小都是20m
XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath 指定对应的dump文件路径

获取dump文件

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。它的用途是为了展示java进程的内存映射信息,或者堆内存详情。
可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。

jmap -heap:format=b pid   bin格式  javaversion 1.5

jmap -dump:format=b,file=filename pid javaversion >1.6

jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里;再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis 

例如

我通过 jdk自带的 jvisualvm 打开了dump 下来的 java_pid10510.hprof 文件
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值