当前位置 博文首页 > 精通时间管理:学妹问我:我遇到了OutOfMemoryError异常怎么办?

    精通时间管理:学妹问我:我遇到了OutOfMemoryError异常怎么办?

    作者:[db:作者] 时间:2021-07-30 18:04

    除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能

    在这里插入图片描述

    java堆溢出

    堆在动态扩展的时候,超过最大值-Xmx参数,就会触发OutOfMemoryError异常
    堆的最小值-Xms参数与最大值-Xmx设置的参数 设置为一样即可避免堆自动扩展

    while (true) { 
     list.add(new OOMObject()); 
    }
    

    虚拟机栈和本地方法栈溢出

    在热点虚拟机中,因为上述两个栈不能动态扩展,所以没有OutOfMemoryError错误,会出现StackOver-flowError

    方法区溢出(因为常量池太大

    方法区里存的类的元数据,包括以下内容:
    1:类的全限定名(类的全路径名)
    2:类的直接超类的全限定名(如果这个类是Object,则它没有超类)
    3:这个类是类型(类)还是接口
    4:类的访问修饰符,如public、abstract、final等
    5:所有的直接接口全限定名的有序列表(假如它实现了多个接口)
    6:常量池、字段、方法信息、类变量信息(静态变量) 装载该类的装载器的引 用(classLoader)、类型引用(class)

    因为方法区存的东西只可能是常量池太大导致内存溢出,其他存的东西都基本是有限的

    NIO—直接内存

    直接内存+其他内存总和大于本机内存时溢出

    cs