1、MetaSpace区域会发生内存溢出
第一种原因:上线的时候MetaSpace区域直接用默认的参数,即根本不设置其大小,这会导Meta
Space区域可能才几十M而已或者设置的比较小,此时对于一个稍微大型系统,因为他有很多自己的类,还依赖了很多外部jar包的类,MetaSpace空间很容易不够的。
第二种原因:就是很多人开发系统代码都会用一些cglib之类的技术动态生成一些类,一旦代码没有控制好,导致生成的类过多的时候,就很容易MetaSpace给塞满,进而引起内存溢出。
2、每个线程的虚拟机栈会发生内存溢出
大部分原因是方法的递归调用引起的
3、堆内存会发生内存溢出
一般来说发生内存溢出有两种主要的场景:
- 系统承载高并发请求,因为请求量过大,导致大量的对象都是存活的,所以要放入新的对象放不下了,此时就会引起内存溢出系统崩溃;
- 系统有泄漏的问题,就是莫名其妙产生了很多对象,结果对象都是存活的,没有及时取消他们的引用,导致触发GC还是无法回收,此时只能引发内存溢出,因为实在是放不下更多的对象了。
你的鼓励是我分享技术最大的动力!如有错误之处,请指正,不胜感激。