在日常工作中,我们经常会遇到OOM异常,下面来记录并分享下对OOM异常的处理方法:
OOM是比较常见的内存溢出问题。
首先,应该先确认是内存泄漏问题还是内存溢出问题。如果是内存泄漏,则可通过工具查看泄漏对象到GC Roots的引用链,掌握了泄漏对象的类型信息,以及GC Roots引用链的信息,就可以比较准确地定位出泄漏代码的位置。
若为内存溢出,则应该检查虚拟机的堆参数(-Xmx与-Xms),与机器物理内存对比看是否还可以调大,从代码上检查是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期间的内存消耗。
如果是过多建立多线程导致的内存溢出,在不能减少线程数或者更换64位虚拟机的情况下,就只能通过减少最大堆和减少栈容量来换取更多的线程。