堆溢出实例
通过不断创建Object对象,并加入到List中,导致堆溢出。
import java.util.ArrayList;
import java.util.List;
/**
* -Xms100M -Xmx100M
* -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/
*/
public class HeapOOM {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
while (true) {
list.add(new Object());
}
}
}
在 D:/ 可以看到OOM生成的dump文件。
通过Java VisualVM 分析
首先将dump文件装入VisualVM
可以看到java.lang.Object对象占用了大量内存,导致堆溢出。