虚拟机系列:内存溢出OOM以及解决思路

您所在的位置:网站首页 java溢出怎么处理 虚拟机系列:内存溢出OOM以及解决思路

虚拟机系列:内存溢出OOM以及解决思路

2023-11-10 02:33| 来源: 网络整理| 查看: 265

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

内存溢出(OutOfMemoryError,简称OOM)是让程序员头疼的问题,出现这种问题一般是内存空间要被用完了,没有足够的空间供程序使用。而在Java程序中,出现内存溢出的原因也有很多,常见的有堆内存溢出,直接内存溢出,永久区/元空间溢出。

堆溢出 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

堆溢出这种是最常见的一种,在Java中堆是重要的一个空间,Java的大量对象都是直接在堆上分配的(参考内存分配)。当大量对象占据了堆空间而且都是强引用,使之始终无法被回收,当所有对象大小之和大于参数-Xmx指定的值时,就会出现溢出了。

导致溢出的原因可能有很多,这里列举下常见的原因:

服务工程中的代码类太多,堆空间不够用,可能在启动的时候就会出现堆溢出的错误。 代码中存在循环或者死循环,产生过多的实体对象。 数据库查询的时候一次查询大量数据。 服务启动的参数-Xmx设置过小,也就是第一点。

例如我们不断往ArrayList中加入对象且无法回收导致出现堆溢出

/** * 启动参数限制最大堆和最小堆:-Xms10m -Xmx10m */ public class Test2 {    public static void main(String[] args) {        ArrayList list = new ArrayList();        for (int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3