码迷,mamicode.com
首页 > 其他好文 > 详细

内存泄漏和内存溢出

时间:2018-07-17 14:20:29      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:最小   lin   html   memory   静态对象   创建对象   启动参数   超过   语句   

概念

内存泄漏(memory leak):无法释放已经不再使用的内存空间。
内存溢出(out of memory): 程序申请的内存超过了现有的内存空间。

内存泄漏

发生场景:

静态变量/静态引用/静态集合类:静态对象存放在方法区,随线程的结束而结束,会始终存在,如果对象比较复杂就会发生内存泄漏
各种连接未显示关闭:数据库连接、网络连接、IO连接,没显示的close,会造成很多对象无法回收
没有及时的将对象设置为空:例如集合的pop方法
监听器

避免内存泄漏:

尽早释放无用的引用
避免在循环语句中创建对象
尽量少用静态的变量

内存溢出

发生场景:

集合类中的对象的引用在使用完之后未清空,导致JVM不能回收。
内存中加载数据过大,如一次从数据库中读取大量的数据。
代码中的死循环或在循环体中产生多个重复对象实体。
启动JVM参数设置过小。
方法区主要存放的是类信息、常量、静态变量等。所以如果程序加载的类过多,或者使用反射、gclib等这种动态代理生成类的技术,就可能导致该区发生内存溢出

避免内存溢出(除了避免内存泄漏的几点之外还包括以下几点):

修改JVM启动参数,直接增加内存。
开启大型文件或从数据库一次拿了太多的数据很容易造成内存溢出,所以在这些地方要大概计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。

https://blog.csdn.net/u012813201/article/details/73793668
https://www.cnblogs.com/panxuejun/p/5883044.html

内存泄漏和内存溢出

标签:最小   lin   html   memory   静态对象   创建对象   启动参数   超过   语句   

原文地址:https://www.cnblogs.com/guofz/p/9322726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!