深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)

模拟内存溢出

一、新建java项目

    深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第1张图片

二、代码如下

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 arrayList = new ArrayList();
		while (true) {
			Demo demo = new Demo();
			arrayList.add(demo);
			
		}
	}

}

三、执行程序、观察内存

        执行Main中的main方法,通过任务管理器观察内存情况,发现内存一直上涨,当涨到一定程度时候程序会抛出如下异常,即为内存溢出。

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第2张图片

生成堆内存快照

一、eclipse中项目JVM参数设置

        项目上右键---Run As---Run Configurations,按照下图所示配置VM arguments

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第3张图片

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

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

        其中-Xms20m -Xmx20m是设置JVM最大和最小堆内存都为20m。配置这里是因为我们要模拟内存溢出,若不把内存设置小点,程序运行后要等很久才可以看到内存溢出信息。

二、运行程序、查看快照

        当我们再次运行程序后,会发现多了一条错误提示,如下图所示

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第4张图片

        快照文件保存在我们项目根目录下,进入项目根目录,可以看到下图所示内容。

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第5张图片

        快照文件使用文本工具打开是乱码,需要使用内存分析工具进行查看分析。这里我们内存分析工具使用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文件打开工具,打开后界面如图所示。

       深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第6张图片

四、导入内存快照文件分析

        点击File---OpenFile,选择刚刚生成的快照文件,打开。打开后可以看到下图。

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第7张图片

        点击下图图标,可以看到内存详细信息

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第8张图片

        内存详细信息如图

        深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第9张图片

        可以看到,红框处占用内存最多。将其展开继续深追,如下图

         深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)_第10张图片


你可能感兴趣的:(JVM)