JVM | 内存溢出

JVM | 内存溢出

1. 导致内存溢出的原因

通常在三个地方会发生内存溢出:
metaspace空间内存溢出
栈内存溢出
堆内存溢出

1-1. metaspace空间内存溢出

  • metaspace默认大小为
    -XX:MetaspaceSize=512M
    -XX:MaxMetaspaceSize=512M

1-1-1. metaspace内存溢出的原因

  • metaspace空间太小
    没有设置metaspace参数,使用了默认的值,而默认值只有
  • 动态代理生成的类太多了,而没有正确的释放掉这些类

1-1-2. 使用代码模拟metaspace内存溢出场景

1-2. 栈内存溢出

  • 手动设置每个线程的虚拟机栈的大小,一般设置成1M
  • 通常情况下,正常的方法调用,1M的栈内存足够了,但是如果在一个线程内递归调用一个方法,就可能造成栈内存溢出了

1-3. 堆内存溢出

实际上最容易引发内存溢出的,就是系统创建的对象太多了,最终导致系统的内存溢出

1-3-1. 什么时候会发生堆内存的溢出

猜你喜欢

转载自www.cnblogs.com/Serenity1994/p/12561183.html
今日推荐