Water2Wine

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、Java堆溢出

原因:

代码中可能存在大对象分配

可能存在内存泄漏,导致在多次GC之后,还是无法找到一块足够大的内存容纳当前对象

解决方法:

检查是否存在大对象的分配,最有可能的是大数组分配
通过jmap命令,把堆内存dump下来,使用mat工具分析一下,检查是否存在内存泄露的问题
如果没有找到明显的内存泄露,使用 -Xmx 加大堆内存
检查是否有大量的自定义的 Finalizable 对象,也有可能是框架内部提供的,考虑其存在的必要性

2、永久代/元空间溢出

原因:

永久代/元空间是jdk不同版本对方法区的具体实现,可能因为生成大量代理类或者应用长时间运行未重启而导致溢出

3、GC overhead limit exceeded

原因:

超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常。

4、方法栈溢出(Out of memory error)

原因:

出现这种异常,基本上都是创建的了大量的线程导致的

需要注意这里的方法栈溢出和Stackoverflow是不同的,Stackoverflow是由于栈帧超出设定值导致的,不属于OOM

5、非常规溢出

分配超大数组

swap溢出:swap(交换分区),类似于虚拟内存,当内存不足时把一部分硬盘空间虚拟成内存使用

本地方法溢出

posted on 2020-08-14 19:44  Water2Wine  阅读(135)  评论(0)    收藏  举报