内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出现了死循环,读取超大的文件等,都会造成内存溢出。

如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并进行分析,是正常情况还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果不是正常的需求,那么就要对代码进行修改,修复这个bug。

1.模拟内存溢出

public class TestJVMOutOfMemory {public static void main(String[] args) {List<Object> list = new ArrayList<>();for (int i = 0; i < 1000000; i++) {StringBuilder str = new StringBuilder();for (int j = 0; j < 1000; j++) {str.append(UUID.randomUUID().toString());}list.add(str.toString());}System.out.println("ok");}
}

设置启动参数以更快的出现问题

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

测试结果如下:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid1102.hprof ...
Heap dump file created [7959370 bytes in 0.063 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOfRange(Arrays.java:3664)at java.lang.String.<init>(String.java:207)at java.lang.StringBuilder.toString(StringBuilder.java:407)at com.yfy.demo01.TestJVMOutOfMemory.main(TestJVMOutOfMemory.java:21)

2.在MAT中进行分析

可以看到,有93.88的内存由Object[]数组占有。这个地方是有可能出现内存溢出的。

点击Details查看详情:

可以看到集合中存储了大量的uuid字符串。

java内存溢出的定位和分析相关推荐

  1. Java内存溢出OOM使用Mat分析

    示例 package com.rumenz;import java.util.ArrayList; import java.util.List;public class OutOfMemory {pu ...

  2. Java内存溢出OOM之dump分析

    目录 内存泄露 内存溢出 1.Java堆内存异常 报错方式 原因 2.Java栈内存异常 报错方式 原因 3.方法区内存异常 报错方式 原因 解决思路 生成dump文件三种方式 dump生成 jvis ...

  3. java 内存溢出快速定位

    背景:线上数据传输功能开启一段时间后就会出现内存溢出 个人理解:内存溢出,说明要不然获取到大量数据导致内存溢出,要不然就是数据无法释放,随着时间堆积越来越多. 日志:查看日志定位是数据传输处的内存溢出 ...

  4. 【java内存泄漏的定位与分析】

    ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的 新番茄花园 增加和减少元素.灵活的设置数组的大小-- 认真阅读本文,我相信一定会对你有帮助.比如为什么A ...

  5. JVM 调优实战--内存溢出的定位和MAT分析

    目录 内存溢出的定位和分析 模拟内存溢出代码 MAT分析 内存溢出的定位和分析 模拟内存溢出代码 添加运行参数: ①-Xms8m:初始堆内存大小为8M: ②-Xmx8m:最大堆内存大小为8M: ③He ...

  6. Java内存溢出分析

    内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一 ...

  7. java内存溢出分析工具:jmap使用实战

    java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap.  1 使用命令  在环境是linux+jdk1.5以上,这个工具是自带的,路 ...

  8. Java内存溢出问题排查分析

    目录 前言 一.MAT(Memory Analyzer Tool) 二.软件初识 三.捕获dump文件 1.主动方式 2.被动方式 四.分析dump文件 总结 前言 项目运行过程中,我们可能会遇到Ja ...

  9. java内存溢出怎么排查_【转】Java学习---内存溢出的排查经历

    前言 OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界.空指针等)来说这类问题是很难定位和解决的. 本文以最近碰到的一次线上内存溢出的定位.解决问题的方式展开 ...

最新文章

  1. 数据结构与算法:13 字符串与整数集合
  2. 新造车公司背后的「资本大佬」
  3. c语言中的tanh函数,tanh()函数,用于C ++中的复数
  4. linux 启动两个摄像头,Linux:(多摄像头)如何运行指定的摄像头
  5. mySQL教程 第9章 触发器
  6. ActivityGroup中的子Activity创建Dialog:android.view.WindowManager$BadTokenException: U
  7. 分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库
  8. 用python画雪花飘落_简单说 JavaScript实现雪花飘落效果
  9. Netty工作笔记0063---WebSocket长连接开发2
  10. Web前端面试指导(十七):一个满屏 品 字布局 如何设计?
  11. linux编译安装rrdtool,Linux下RRDTool安装方法
  12. 算法: 最大正方形面积221. Maximal Square
  13. TracePro模拟
  14. matlab中各种线型-颜色-标记点
  15. ACM公约数和公倍数
  16. 题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】
  17. 100行Python代码,做一个打地鼠小游戏!
  18. 怎样才能走进区块链行业?
  19. React报错 Too many re-renders
  20. 缺少msvc140.dll解决办法,缺少任意dll文件的解决办法

热门文章

  1. 00-深入学习cache
  2. [PSA]-PSA Certified简介
  3. Git常见报错及解决方法
  4. 6.windows线程切换_主动切换
  5. 1.6 Java项目实战:计算平均成绩
  6. ACM入门之【线性筛】
  7. 2021算法竞赛入门班第八节课【数学】习题
  8. 第四章 数学知识【完结】
  9. 深度优先搜索(DFS)相关习题
  10. Linux之数组和关联数组