学妹问我:我遇到了OutOfMemoryError异常怎么办?

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

学妹问我:我遇到了OutOfMemoryError异常怎么办?_第1张图片

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—直接内存

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

你可能感兴趣的:(JVM,jvm,java)