【JVM学习笔记】(一)jvm初体验-内存溢出问题分析及解决方案

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ItChuangyi/article/details/85522448

####1、开始
创建Main类和Demo类,在Main类的main方法中创建List,并向List中无限创建Demo对象,造成内存溢出, 并输出内存溢出错误文件在项目目录下,为了使等待时间减小,设置运行堆内存大小。

####2、创建Demo类

package com.cheng.test1;
       /** 
        * @ClassName: Demo 
        * @Description: TODO
        * @author: Cheng
        * @date: 2018年4月24日 上午11:01:44  
        */
       public class Demo {
       	
       }

3、创建Main类,造成堆内存溢出

package com.cheng.test1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /** 
     * @ClassName: Main 
     * @Description: TODO
     * @author: Cheng
     * @date: 2018年4月24日 上午11:01:37  
     */
    public class Main {
    
    	/** 
    	 * @Title: main 
    	 * @Description: TODO 
    	 * @param args void
    	 * @author Cheng
    	 * @date 2018年4月24日上午11:01:37
    	 */
    	public static void main(String[] args) {
    		List<Demo> list = new ArrayList<>();
    		// 内存溢出
    		while(true){
    			list.add(new Demo());
    		}
    
    	}
    }

4、运行 Run As ->Run Configurations

 -XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m

-XX:+HeapDumpOnOutOfMemoryError:可以让虚拟机在堆内存溢出时Dump出当前的内存堆转储快照,会保存
在项目目录下,用于分析;
-Xms20m -Xmx20m:将堆得最小值-Xms参数与最大值-Xmx设置成一样,则堆大小不会自动扩展。

会在项目的目录下生成 java_pid1888.hprof 之类的文件

5、使用Eclipse的MemoryAnalyzer打开文件
分析结果:

可以看到 com.cheng.test1.Demo 造成内存溢出

猜你喜欢

转载自blog.csdn.net/ItChuangyi/article/details/85522448