因为虚拟机导致的错误
-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
1005308
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%。運行之前的截圖如下:
運行之后的截圖如下:
?
?
?
?
?
總結
以上是生活随笔為你收集整理的因为虚拟机导致的错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团配送员工资多少 和网上传言的差距
- 下一篇: struts2 的struts.prop