Java 堆溢出
Java堆用於存儲對象實例,只要不斷地創建對象,並且保證 GC Roots 到對象之間有可達路徑來避免垃圾回收機制清除這些對象,那麼在對象數量到達最大堆的容量限制後就會產生內存溢出異常。
代碼限制Java堆的大小爲20M,不可擴展(將堆的最小值-Xms參數與最大值-Xmx參數設置爲一樣即可避免堆自動擴展),通過參數 -XX:+HeapDumpOnOutOfMemoryError 可以讓虛擬機在出現內存溢出異常時Dump出當前的內存轉儲快照以便事後進行分析
參數配置如圖所示:
代碼如下:
/**
* VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObject{
}
public class void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject)();
while(true) {
list.add(new OOMObject());
}
}
}
運行結果: