代码
import java.util.ArrayList; import java.util.List; /** VM Args:-Xms20m -Xms20m -XX:+HeapDumpOnOutofMemoryError */ public class HeapOOM { static class OOMObject { int[] array = new int[10000]; } public static void main(String[] args) { long start = System.currentTimeMillis(); try { List<OOMObject> list = new ArrayList<OOMObject>(); while (true) { list.add(new OOMObject()); } } finally { System.out.println("timespent:" + (System.currentTimeMillis() - start)); } } }
命令
java -Xms20m -Xms20m -Xdump:system:events=systhrow,filter=java/lang/OutOfMemoryError,label=/home/zenap/test/core.%Y%m%d.%H%M%S.%pid.%seq.dmp,range=1..1,priority=999,request=exclusive+compact+prepwalk HeapOOM
堆内存与dmp文件大小映射关系
堆内存大小 | dmp文件大小 |
---|---|
-Xms10m -Xmx10m | 449M |
-Xms20m -Xmx20m | 460M |
-Xms40m -Xmx40m | 481M |
-Xms100m -Xmx100m | 544M |
-Xms200m -Xmx200m | 632M |
-Xms600m -Xmx600m | 1049M |
结论
以第一个Xmx10m的dmp大小作为参照,增加的dmp文件大小约等于增加的Xmx的大小。