模拟
先模拟一个OOM的类
package org.fool.test;
import java.util.LinkedList;
import java.util.List;
public class TestOOM {
public static class OOMObject {
byte[] b = new byte[1024];
}
/**
* -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
*/
public static void main(String[] args) {
List<OOMObject> list = new LinkedList<>();
while (true) {
list.add(new OOMObject());
}
}
}
复制
Note:自定义一个类OOMObject,然后在main 函数中创建一个LinkedList,开启一个while 死循环,不断往list 中添加OOMObject
测试
启动测试前需要配置VM Options,这里为了快速模拟出OOM 溢出的效果,故将堆内存设置成 20M
-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
复制
运行测试,抛出了 java.lang.OutOfMemoryError
分析
使用JProfiler 打开 tmp 目录下的 java_pid52952.hprof 文件
Note:JProfiler 是唯一一款获过奖的Java剖析工具,被誉为业界“最好的Java 剖析/测试工具”,作为一款商业授权的软件,使用需要购买 license,可以前往 EJ 官网下载对应的版本
https://www.ej-technologies.com/download/jprofiler/files
复制
双击TestOOM$OOMObject
在References 选择Incoming references
随机选择一个,点击右上方的 Show Paths To GC Root,定位到问题出现在代码的17行
Note:Java 的垃圾回收使用的是 可达性分析算法,它的核心目的就是判断Java 对象是否存活。
泰克风格 只讲干货 不弄玄虚
文章转载自TechStyle,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1489次阅读
2025-03-13 11:40:53
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
861次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
601次阅读
2025-04-03 15:21:16
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
506次阅读
2025-03-13 14:38:19
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
417次阅读
2025-04-01 20:42:12
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
379次阅读
2025-04-10 15:35:48
优炫数据库成功应用于国家电投集团青海海南州新能源电厂!
优炫软件
366次阅读
2025-03-21 10:34:08
国产化+性能王炸!这套国产方案让 3.5T 数据 5 小时“无感搬家”
YMatrix
344次阅读
2025-03-13 09:51:26
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
296次阅读
2025-04-11 09:38:42
天津市政府数据库框采结果公布!
通讯员
251次阅读
2025-04-10 12:32:35