zoukankan      html  css  js  c++  java
  • 读书笔记-深入理解JVM虚拟机-1.OOM初探

    Java堆OOM(Out-Of-Memory)异常
    执行例如以下程序,爆出异常 java.lang.OutOfMemoryError: Java heap space
    /**
     * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
     * @author zzm
     */
    public class HeapOOM {
    
    
    	static class OOMObject {
    	}
    
    
    	public static void main(String[] args) {
    		List<OOMObject> list = new ArrayList<OOMObject>();
    
    
    		while (true) {
    			list.add(new OOMObject());
    		}
    	}
    }


    分析:
    1.内存配置
    -Xms20m 堆的大小是20M
    -Xmx20m 堆最大能够扩展到20M,因为堆的大小本来就是20M 所以该堆不能够扩展
    -XX:+HeapDumpOnOutOfMemoryError 当出现OutOfMemory异常的时候导出堆文件


    OOMObject用来占用空间,用一个List来存储OOMObject以保证我们每一个生成的OOMObject对象能够和GCRoot引用链连接起来
    这种话就会导致OOM异常。由于每一个对象都是实用的(都是能够和GCRoot连接起来的)


    分析OOM问题的一般过程例如以下
    1.发生OOM了
    2.推断发生OOM的位置的对象是否应该是该存活的
    3.假设OOM位置的对象是不应该存活的并且发生了OOM异常,那就是我们的程序写的有问题
    4.假设OOM的位置的对象是应该存活的可是却发生了OOM异常,那我们就应该适当调整JVM參数了


    关于当前这个样例:
    非常明显我们用的是死循环一直创建对象,而且用List保存持有对象的实例,导致了JVM无法回收创建的对象,所以产生了OOM问题
  • 相关阅读:
    golang学习笔记 ---接口
    golang学习笔记 --类与方法
    golang学习笔记--面向对象编程
    golang学习笔记---错误处理
    golang学习笔记---defer[延迟函数]
    golang学习笔记--闭包
    golang学习笔记---函数
    SSD技术扫盲之:什么是NVMe? NVMe SSD有什么特点?
    云原生存储系列文章:云原生应用的基石
    发财树的养殖方法
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7010729.html
Copyright © 2011-2022 走看看