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. 堆内存溢出
实际上最容易引发内存溢出的,就是系统创建的对象太多了,最终导致系统的内存溢出