深入理解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,选择刚刚生成的快照文件,打开。打开后可以看到下图。

       

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

       

        内存详细信息如图

       

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

        


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值