内存调优是程序员必备的一项技能,也是测试最重要的一点.当程序中运行报错OOM.在时间紧急的情况下,我们必须快速找出,问题代码的行数,这个时候就需要用到一款工具叫Jprofiler,在Idea setting plugins能找到,但还需下载客户端,jprofiler官网直接下载.具体下载过程,这里不做重点讲解.
在一个项目中突然出现了OOM故障,那么该如何排除~?
研究为什么出错?
-
最快
能够看出代码第几行出错:内存快照分析工具,MAT(eclipse), jProfiler
-
最慢
DeBug:一行行分析代码!
MAT(eclipse), jProfiler 作用:
-
分析Dump内存文件,快速定位内存泄漏
-
获得堆中的数据
-
获得大的对象
-
…
我们举个OOM的例子:
代码:
注意:需要将内存调小 vm option :-Xms8m -Xmx8m -XX:+PrintGCDetails
package com.qiu.classloader;
import java.util.Random;
public class TestMethod {
private int b;
private String name = "qiuzhikang";
public static void main(String[] args) {
String str ="qiuzhikangxuejava";
while(true)
{
str+=str+new Random().nextInt(999999999)+new Random().nextInt(999999999);
}
}
}
-XX:+PrintGCDatils//打印GC垃圾回收信息
调出轻GC和重GC的信息:
在这个代码中,我们假设找不出问题的所在,进而我们需要将内存调小,
首先:在Vm options加参数:-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
参数解释Xms:设置初始化内存分配大小, Xmx 设置最大分配内存,默认1/4,1/64
-XX:+PrintGCDatils//打印GC垃圾回收信息
调出轻GC和重GC的信息:
提示我们Dumping了一个文件下来,方便我们用jprofiler调试:
前提是我们需要有这个客户端:接下来双击打开
根据软件的定位信息:定位到了14行出现了问题:
题外话: