jvm内存溢出实例一

本文通过一个具体的Java堆溢出实例,详细分析了导致内存溢出的原因,并展示了如何使用Eclipse MAT工具进行问题定位的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.内存溢出实例
应用日志报:java.lang.OutOfMemoryError: Java heap space

这个现象就是堆溢出,具体原因需要看dump内存。

如果之前配置了:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
则会在相应路径下会生成dump文件

生成的文件以:hprf结尾。

用eclipse mat分析:

可以看到main线程中,有个map占用了98.75%的内存。
可以继续看 [see stacktrace],显示如下:
 Thread Stack

main
  at java.lang.OutOfMemoryError.<init>()V (OutOfMemoryError.java:48)
  at java.lang.Integer.valueOf(I)Ljava/lang/Integer; (Integer.java:642)
  at jvm.OverHeapTest.main([Ljava/lang/String;)V (OverHeapTest.java:13)

找到OverHeapTest对应13行代码:
public class OverHeapTest {
public static void main(String[] args) {
Map<Object,String> map = new HashMap<Object, String>();
        Random r = new Random();
        while (true) {
            map.put(r.nextInt(), "value");
        }
}
}

可以看到有个while循环不断往map塞元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值