专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

内存溢出怎么解决 内存溢出和内存泄露有哪些区别【详细介绍】

来源:小嗨整编  作者:小嗨  发布时间:2023-03-01 08:20
摘要:摘要:内存溢出和内存泄露的区别是什么?内存溢出怎么解决?内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现outofmemory比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露是指...

  摘要:内存溢出和内存泄露的区别是什么?内存溢出怎么解决?内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

内存溢出怎么解决 内存溢出和内存泄露有哪些区别【详细介绍】

  【内存溢出】内存溢出怎么解决 内存溢出和内存泄露的区别

  内存溢出和内存泄露的区别

  内存溢出 out of memory ,是指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory ;比如申请了一个 integer , 但给它存了 long 才能存下的数,那就是内存溢出。

  内存泄露 memory leak ,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存 ,迟早会被占光。

  memory leak 会最终会导致 out of memory !

  内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。

  内存泄漏是指你向系统申请分配内存进行使用 (new) ,可是使用完了以后却不归还 (delete) ,结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装 4 个果子,你装了 5 个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列 , 称为内存溢出 。

  以发生的方式来分类,内存泄漏可以分为 4 类:

  1 、 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

  2、 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

  3、 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

  4、 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

  从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。

  内存溢出的原因以及解决方法

  引起内存溢出的原因有很多种,小编列举一下常见的有以下几种:

  1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

  2、 集合类中有对对象的引用,使用完后未清空,使得 JVM 不能回收;

  3、代码中存在死循环或循环产生过多重复的对象实体;

  4、 使用的第三方软件中的 BUG ;

  5、启动参数内存值设定的过小

  内存溢出的解决方案:

  第一步,修改 JVM 启动参数,直接增加内存。 (-Xms , -Xmx 参数一定不要忘记加。 )

  第二步,检查错误日志,查看 OutOfMemory 错误前是否有其它异常或错误。

  第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

  重点排查以下几点:

  1、检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

  2、检查代码中是否有死循环或递归调用。

  3、检查是否有大循环重复产生新对象实体。

  4、检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

  5、 检查 List 、 MAP 等集合对象是否有使用完后,未清除的问题。 List 、 MAP 等集合对象会始终存有对对象的引用,使得这些对象不能被 GC 回收。

  第四步,使用内存查看工具动态查看 电脑内存 使用情况。


本文地址:IT知识频道 https://www.eeeoo.cn/itzhishi/905548.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


IT知识
小编:小嗨整编
相关文章相关阅读
  • csgo怎么连跳(csgo职业选手都是滚轮跳吗)

    csgo怎么连跳(csgo职业选手都是滚轮跳吗)

    (本文来自hcr的知乎)[姿势]跳跃是一种利用csgoorigin引擎特性的姿势,目的是快速移动。看起来像是连续跳跃。你甚至不需要按W键就能跳。你可以去哔哩哔哩搜索具体的教程。大跳时按住深蹲键,几乎同时按下跳。深蹲键不要松,会比普通跳...

  • 佳能5d4怎么样(佳能5d4深度评测)

    佳能5d4怎么样(佳能5d4深度评测)

    在目前的单反相机领域,提到佳能EOS5DMarkIV可谓是家喻户晓。佳能EOS5DMarkIV是一款高端全画幅相机,可以适应大多数类型的摄影,可以在大多数环境下使用(包括很多极端环境),因此受到摄影爱好者和专业摄影师的青睐。现...

  • ps怎么美白(ps怎么美白人物皮肤)

    ps怎么美白(ps怎么美白人物皮肤)

    方法/步骤如下:1.首先用ps打开要修饰的照片,然后用ctrl+J复制图层,得到图层1。2.然后执行“图像-调整-配色”,检查中性点,再执行“编辑-淡入-配色”,参数设置为60%。3.然后复制图层1得到副本,再将图层混合模式改为“滤色”,...

  • 天涯明月刀职业(天涯明月刀职业介绍)

    天涯明月刀职业(天涯明月刀职业介绍)

    太白的伤害很高,属于纯出口职业,起步的时候可以很硬朗。如果爆发的话会比其他职业高,但是是近战职业,所以对操作的需求很大。目前氪水平还是很高的,平民谨慎,中国R玩家应该可以发挥后果。其实力在剑论中可以算是很强的存在,在剑论中排名之一。第二名...

  • 上海老街攻略(上海有哪些老街可以逛)

    上海老街攻略(上海有哪些老街可以逛)

    今天给大家分享一下上海老街攻略的知识,也给大家讲解一下上海有哪些老街是可以去的。如果你能偶然解决你正面临的问题,别忘了关注这个网站,现在就开始!上海夜场介绍上海的夜景相当多。1.外滩观光,外白渡桥,苏州河~邮局在那里。这是看陆家嘴高楼。2...

  • 野三坡旅游景点介绍

    野三坡旅游景点介绍

       今天和大家分享一些关于野三坡旅游景点介绍的问题。以下是小编对这一问题的总结。让我们来看看。野三坡景区位于河北省涞水县。野三坡位于河北省保定市涞水县,北京西南。它是国家AAAA级旅游风景区。2006年,它与杜诗风景区、白石山风景区一...

  • 安魂弥撒的简单介绍

    安魂弥撒的简单介绍

    今天我给大家介绍一下安魂曲弥撒以及相应的知识点。希望对你有帮助。别忘了收藏这个网站。安魂曲是谁创作的?安魂曲又称安魂曲、纪念曲、安慰曲,是一种特殊的弥撒,在基督教悼念死者的仪式中用作合唱组曲。安魂曲很多音乐家都写过,但是莫扎特的K626安...

  • 山川相缪(山川相缪怎么读拼音)

    山川相缪(山川相缪怎么读拼音)

       今天和大家分享一下关于山川的问题(拼音怎么读)。以下是小编对这个问题的总结。让我们来看看。山川相缪【拼音】shānchuānxiāngliáo【解释】形容山与河流相互交错。山水环绕,一片翠绿。缪,盘绕【出处】宋·苏轼《赤壁赋...

  • 周排行
  • 月排行
  • 年排行

精彩推荐