虚拟机系列:内存溢出OOM以及解决思路 |
您所在的位置:网站首页 › java溢出怎么处理 › 虚拟机系列:内存溢出OOM以及解决思路 |
持续创作,加速成长!这是我参与「掘金日新计划 · 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 |