深入理解JVM學習筆記(三、模擬內存溢出 內存監控方法)

模擬內存溢出

一、新建java項目

   

二、代碼如下

package com.zjt.test.jvm003;

public class Demo {

}
package com.zjt.test.jvm003;

import java.util.ArrayList;

public class Main {

	public static void main(String[] args) {
		ArrayList<Demo> arrayList = new ArrayList<Demo>();
		while (true) {
			Demo demo = new Demo();
			arrayList.add(demo);
			
		}
	}

}

三、執行程序、觀察內存

        執行Main中的main方法,通過任務管理器觀察內存情況,發現內存一直上漲,當漲到一定程度時候程序會拋出如下異常,即爲內存溢出。

       

生成堆內存快照

一、eclipse中項目JVM參數設置

        項目上右鍵---Run As---Run Configurations,按照下圖所示配置VM arguments

       

        配置內容:-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m

        其中-XX:+HeapDumpOnOutOfMemoryError指的是在堆溢出時保存快照。

        其中-Xms20m -Xmx20m是設置JVM最大和最小堆內存都爲20m。配置這裏是因爲我們要模擬內存溢出,若不把內存設置小點,程序運行後要等很久纔可以看到內存溢出信息。

二、運行程序、查看快照

        當我們再次運行程序後,會發現多了一條錯誤提示,如下圖所示

       

        快照文件保存在我們項目根目錄下,進入項目根目錄,可以看到下圖所示內容。

       

        快照文件使用文本工具打開是亂碼,需要使用內存分析工具進行查看分析。這裏我們內存分析工具使用Eclipse Memory Analyzer。

三、下載安裝內存分析工具Eclipse Memory Analyzer

        下載地址:http://www.eclipse.org/mat/downloads.php

        下載後解壓縮,雙擊其目錄下MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64\mat\MemoryAnalyzer.exe文件打開工具,打開後界面如圖所示。

      

四、導入內存快照文件分析

        點擊File---OpenFile,選擇剛剛生成的快照文件,打開。打開後可以看到下圖。

       

        點擊下圖圖標,可以看到內存詳細信息

       

        內存詳細信息如圖

       

        可以看到,紅框處佔用內存最多。將其展開繼續深追,如下圖

        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章