准备工具:
eclipse
做如下参数设置:
Windows->Preferences->Java->Installed JREs->Edit JRE, 这个时候设置Default VM arguments=-Xms2m -Xmx2m -XX:+HeapDumpOnOutOfMemoryError
上述参数设置的意思是:设置堆内存最小为2m,最大也为2m,并且在发生OOM的时候dump内存
还需要一步就是安装MAT:
链接如下:http://download.eclipse.org/mat/1.3.1/update-site/
好了现在写一个测试程序跑一下:
直接运行上面的代码就可以,会出现OOM error,这个时候就会生成一个dump堆栈信息的文件:名字如java_pid16824.hprof
如果你的eclipse安装了MAT插件,那么这个时候,你就可以直接打开,并且可以找到这样的信息:
Thread Stack
main
at java.lang.OutOfMemoryError.<init>()V (Unknown Source)
at java.util.Arrays.copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; (Unknown Source)
at java.util.Arrays.copyOf([Ljava/lang/Object;I)[Ljava/lang/Object; (Unknown Source)
at java.util.ArrayList.ensureCapacity(I)V (Unknown Source)
at java.util.ArrayList.add(Ljava/lang/Object;)Z (Unknown Source)
at com.luch.security.demo.OOMTest.main([Ljava/lang/String;)V (OOMTest.java:15)
哈哈,这样就可以帮忙程序员分析到底是因为什么原因导致的OOM了
eclipse
做如下参数设置:
Windows->Preferences->Java->Installed JREs->Edit JRE, 这个时候设置Default VM arguments=-Xms2m -Xmx2m -XX:+HeapDumpOnOutOfMemoryError
上述参数设置的意思是:设置堆内存最小为2m,最大也为2m,并且在发生OOM的时候dump内存
还需要一步就是安装MAT:
链接如下:http://download.eclipse.org/mat/1.3.1/update-site/
好了现在写一个测试程序跑一下:
package com.luch.security.demo;
import java.util.ArrayList;
import java.util.List;
public class OOMTest {
static class OOMObject {
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
while (true) {
list.add(new OOMObject());
}
}
}
直接运行上面的代码就可以,会出现OOM error,这个时候就会生成一个dump堆栈信息的文件:名字如java_pid16824.hprof
如果你的eclipse安装了MAT插件,那么这个时候,你就可以直接打开,并且可以找到这样的信息:
Thread Stack
main
at java.lang.OutOfMemoryError.<init>()V (Unknown Source)
at java.util.Arrays.copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; (Unknown Source)
at java.util.Arrays.copyOf([Ljava/lang/Object;I)[Ljava/lang/Object; (Unknown Source)
at java.util.ArrayList.ensureCapacity(I)V (Unknown Source)
at java.util.ArrayList.add(Ljava/lang/Object;)Z (Unknown Source)
at com.luch.security.demo.OOMTest.main([Ljava/lang/String;)V (OOMTest.java:15)
哈哈,这样就可以帮忙程序员分析到底是因为什么原因导致的OOM了