因为虚拟机导致的错误
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError以上参数:-Xms20m:表示堆的最小值为20M-Xms20m:表示堆的最大值同样设置为20M,-XX:+HeapDumpOnOutOfMemoryError:表示的意思是可以让虚拟机在出现内存溢出异常是Dump(倾倒,倾卸,垃圾场,倒垃圾)出当前内存堆转储快照以便事后进行分析。
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
以上参数:
-Xms20m:表示堆的最小值为20M
-Xmx20m:表示堆的最大值同样设置为20M,
-XX:+HeapDumpOnOutOfMemoryError:表示的意思是可以让虚拟机在出现内存溢出异常时Dump(倾倒,倾卸,垃圾场,倒垃圾)出当前内存堆转储快照以便事后进行分析。
在Debug configuration中配置以上参数,运行一下代码:将出现最下面的异常。
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
当改变上面的数值的参数后,可以改变运行了的次数。
入以下代码:
package com.it;
import java.util.ArrayList;
import java.util.List;
publicclass HeapOOM {
staticclass OOMObject{
}
publicstaticvoid main(String[] args) {
int i = 0;
List<OOMObject> list = new ArrayList<OOMObject>();
while(++i<1005310){
list.add(new OOMObject());
System.out.println(i);
}
}
}
出现的异常如下:
1005306
1005307
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid4568.hprof ...
Heap dump file created [22044099 bytes in 0.464 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.ensureCapacity(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at com.it.HeapOOM.main(HeapOOM.java:14)
说明:(22044099/1024)/1024 = 21M,比配置过的参数多1M(一般比配置的数值大).此程序片段运行了1005308次,运行时间是0.464秒。出现的异常是堆内存溢出异常。
在运行以上程序片段期间,CPU使用率也将上升,几度为100%。运行之前的截图如下:
运行之后的截图如下:
更多推荐
所有评论(0)