• OutOfMemoryError/OOM/内存溢出异常实例分析--堆内存溢出


    Java堆内存溢出

    只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,

    那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常,代码如下:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HeapOOM {
    
        static class OOMObject {
    
        }
    
        public static void main(String[] args) {
            List<OOMObject> list = new ArrayList<>();
            while (true) {
                list.add(new OOMObject());
            }
        }
    
    }

    在运行的时候,需要设置一下Java堆的大小,并且不可扩展,操作如下:

    然后填写JVM启动参数:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

    限制Java堆大小20m,最大值和最小值一致就达到不可扩展的目的了,-XX:+HeapDumpOnOutOfMemoryError参数可以让虚拟机在出现

    内存溢出异常时Dump出当前的内存转储快照以便事后分析。(感兴趣的可以使用内存映像分析工具Eclipse Memory Analyzer打开堆转储快照文件进行分析)

    运行结果如下:

  • 相关阅读:
    Confluo: Distributed Monitoring and Diagnosis Stack for High-speed Networks
    kubernetes in action
    kubernetes in action
    kubernetes in action
    kubernetes in action
    kubernetes in action
    Kafka: Exactly-once Semantics
    Reinforcement Learning
    unity的 Social API
    hdu 4336 概率dp + 状压
  • 原文地址:https://www.cnblogs.com/java-spring/p/9851597.html
Copyright © 2020-2023  润新知