模拟过程

  • 加参数定义最大堆空间和最小堆空间
 -Xms20m -Xmx20m
  • 加参数在堆溢出dump出当前的堆快照
-XX:+HeapDumpOnOutOfMemoryError

上代码

import java.util.ArrayList;
import java.util.List;/*** @author yangyuanliang* @version 1.9* @date 2022/4/24 21:49*/
public class HeapOOM {static class OOMObject{}public static void main(String[] args) {List<HeapOOM> ooms = new ArrayList<>();while(true) {ooms.add(new HeapOOM());}}
}

运行结果

/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin/java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=53845:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/tools.jar:/Users/liang/ruijie/jvm-test/out/production/jvm-test HeapOOM
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid76264.hprof ...
Heap dump file created [27766960 bytes in 0.100 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3210)at java.util.Arrays.copyOf(Arrays.java:3181)at java.util.ArrayList.grow(ArrayList.java:265)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)at java.util.ArrayList.add(ArrayList.java:462)at HeapOOM.main(HeapOOM.java:17)Process finished with exit code 1

分析过程

Java堆内存的OutOfMemoryError异常是实际应用中最常见的内存溢出异常情况。常规的处理方法,通过内存映像分析工具对Dump出来的堆快照进行分析。确认是内存泄露还是内存溢出(这个是基于导致OOM的对象是否是必要的来决定的)。

内存泄露

如果是内存泄漏,可进一步借助攻击分析查看对象到GC Roots的引用链,找到泄漏对象通过怎样的引用路径,与那些GC Roots相关联,才导致垃圾收集器无法回收他们,根据对象的类型信息以及他到GCRoots引用链的信息,一般可以准确的定位到这些对象创建的位置,进而找出内存泄漏代码的位置


内存溢出

内存溢出的话,那就应该检查Java虚拟机的堆参数,通过- Xmx与-Xms设置,与机器内存对比,看看是否还有空间可调整。在从代码简称是否存在某些对象生命周期过长,持有状态时间过长,存储结构设计不合理的情况,尽量减少程序运行期的内存消耗。

JAVA堆溢出OOM场景模拟及排除过程相关推荐

  1. Java堆溢出,虚拟机栈和本地方法栈溢出

    Java堆溢出 JVM运行时分区的堆区是占比最大的,它用来存储对象的,每当我们new一个对象,而且要保证这个对象到GC Roots 那些对象是有路径可达的(不可达就有很大可能性被清除),那么当对象的数 ...

  2. 处理Java堆溢出的简单思路

    处理Java堆溢出的简单思路 java堆溢出 Java堆内存的OOM异常是实际应用中常见的内存溢出异常情况.当出现Java堆内存溢出时,异常堆栈信息"Java.lang.OutOfMemor ...

  3. java上传文件堆溢出,JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】

    Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,就会在对象数量到达最大堆的容量限制后产生内存溢出异常. 代码清单中限制J ...

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

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

  5. linux java性能监控工具_性能监控工具以及java堆分析OOM

    一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...

  6. Java内存溢出(OOM)分析

    当JVM内存不足时,会抛出java.lang.OutOfMemoryError. 主要的OOM类型右: Java heap space:堆空间不足 GC overhead limit exceeded ...

  7. 【JAVA】java 堆溢出分析

    Java 堆内存分析 mat 使用 https://www.cnblogs.com/AloneSword/p/3821569.html 优秀博客关于堆溢出分析(也是根据葛一鸣的<实战Java虚拟 ...

  8. Java内存溢出(OOM)异常完全指南

    原文:http://luecsc.blog.51cto.com/2219432/1948800 这也许是目前最为完整的Java OOM异常的解决指南. 1.Java.lang.OutOfMemoryE ...

  9. Java堆溢出错误:java.lang.OutOfMemoryError: Java heap space

    可能原因 1.程序中出现了死循环 2.程序占用内存太多,超过了JVM堆设置的最大值. 解决方法 内存溢出java.lang.OutOfMemoryErrory后面一般会跟上内存溢出的区域PermGen ...

最新文章

  1. Android配置----Android开发环境搭建
  2. cocos2dx动作讲解
  3. 程序异常是python语言基本控制结构_计算机二级python 知识点篇(程序的控制结构)...
  4. uniapp对象怎么获取值_第65p,关于:生成器、迭代器与迭代对象(上)
  5. 微型计算机发展方向网络化,第二章 会计电算化工作环境
  6. 华彬 - 华彬讲透孙子兵法(2015年5月22日)
  7. 以拯救之因 强制恢复导致ORA-600 4000错误案例
  8. Redhat_as4_oracle10g自启动脚本设置
  9. 最实用也最容易被遗忘的 Linux 命令行使用技巧
  10. SM3算法的C++实现(代码)
  11. tcpudp测试工具的使用,串口转wifi模块udp测试
  12. 逐飞K66核心板+逐飞DAP下载器调试方式及接线(SWD)
  13. 双11之战:被激化的酒类电商出击,看1919新打法
  14. 滴滴司机调度系统实践
  15. 在 HTML 中使用 ARIA 的规则
  16. 御坂网络(枚举基准,二分图)
  17. html中怎么录音,HTML5怎么实现录音和播放功能
  18. MIPI屏和LVDS屏有什么区别
  19. 【ps】ps如何画直折线
  20. 【python】——Python中的*和**的作用和含义

热门文章

  1. 一篇非常好的Spring教程
  2. Web ApI(JS进阶)
  3. pandas计数函数 :value_counts( )的使用
  4. oracle联合主键删除,oracle数据库删除联合主键
  5. 宁波网站排名优化,如何做营销型的网站?
  6. 你离英文的技术文档大神,只差这个中英文对照!
  7. A*- not a star in the space, it's on you hands
  8. CMD删除指定文件夹
  9. Android App 线上热修复方案Xposed
  10. C++ 编写二维码(有源码)