JVM调优学习第一篇,内存溢出错误分析

设置JVM启动参数
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

说明:

-Xms20m 即堆最小20M
-Xmx20m 即堆最大20M

编写JAVA代码

package test1;

import java.util.ArrayList;
import java.util.List;

public class HeapOOM {
	
	static class OOMObject {
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<OOMObject> list = new ArrayList<OOMObject>();
		while(true) {
			list.add(new OOMObject());
		}
	}

}


结果:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid5344.hprof ...
Heap dump file created [29680649 bytes in 0.424 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at test1.HeapOOM.main(HeapOOM.java:18)


根据上述出错信息,可以首先判断

发生内存溢出的是 "Java Heap Space" JAVA堆区域

然后需要使用 Eclipse Memory Analyzer 工具分析内存堆的情况(http://download.eclipse.org/mat/1.4/update-site/)

你可能感兴趣的:(JVM调优)