返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 什么叫内存溢出?内存泄漏的…
 英伟达的狂欢还未终结
 吉利高管拒绝与小米SU7对立;…
 沙特阿美盈利下挫25%仍派息千…
 SFX规格金牌电源评测:这种电…
 航嘉多核WD500
 小身材却有卓越性能 钜能SFX…
 windows11电脑分盘怎么分 wi…
 2019上半年PC硬盘排行:西数…
 windows11硬盘怎么分区 wind…
 请人修电脑公司上门修电脑 硬…
 宁波市消保委提醒:家电维修…
 电脑志愿维修队忙个不停
 线上线下渠道策略总结
 赢在执行!2023年渠道半年度…
 智能家居渠道零售经验分享(四…
 AI化、人群细分、跨界合作成…
 双十二来了给你推荐 11 个值…
 为什么文献打印出来阅读效果…
 入手华硕灵耀14 双屏AI超轻薄…
 首款女性AI超轻薄本:华硕a豆…
 华硕灵耀14双屏AI超轻薄本助…
 38焕新季盛大开启 华硕主板送…
 Haswell和ivy bridge区别对比
 华硕P8Z68-V LX的USB接口数量…
 巨丰午评:创业板迎强势反弹…
 锐龙7 7800X3D首测:3299元功…
 iphone5内存
 JPR:2023年Q4全球独立显卡出…
 神奇!AMD显卡暴涨117%份额…
 荣耀MagicBook X 14 2022(酷…
 2023年还有人在网上购买双路…
 2017-2022年中国电脑电源市场…
 智信精密:产品具体应用领域…
 苹果AI电脑来了!8GB相当于1…
 李宇明:语言研究的“植树人…
 硬盘的简称
 Thinkpad E420 主板故障问题…
 电脑主板坏了修要多少钱
 联想电脑维修 故障分析及维修…
 银行做好『渠道运营』的12条…
 加强渠道运营管理 提升企业核…
 跨境渠道运营总结-2月
 澜起科技获29家机构调研: 随…
 你觉得接下来几年手机CPU的性…
 笔记本处理器哪个好-笔记本处…
 台式电脑亮度怎么调节 台式电…
 雷鸟(FFALCON)
 宏基手提电脑怎么调亮度【图…
 《艾尔登法环》DLC即将发布 …
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
什么叫内存溢出?内存泄漏的定义又是什么?使用中如何避免?
作者:佚名 文章来源:本站原创 点击数: 更新时间:2024/3/13 6:31:59 | 【字体:

  中国牛奶品牌排行内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存,于是就发生了内存溢出。

  内存泄漏:内存泄漏指程序运行过程中分配内存给临时变量,用完之后却没有被GC回收,始终占用着内存,既不能被使用也不能分配给其他程序,于是就发生了内存泄漏。

  内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;

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

  内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。

  我们知道jvm通过持久带实现了java虚拟机规范中的方法区,而运行时常量池就是保存在方法区中的,因此发生这种溢出可能是运行时常量池溢出,或是由于程序中使用了大量的jar或class,使得方法区中保存的class对象没有被及时回收或者class信息占用的内存超过了配置的大小。

  发生这种溢出的原因一般是创建的对象太多,在进行垃圾回收之前对象数量达到了最大堆的容量限制。

  解决这个区域异常的方法一般是通过内存映像分析工具对Dump出来的堆转储快照进行分析,看到底是内存溢出还是内存泄漏。如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链,定位出泄漏代码的位置,修改程序或算法;如果不存在泄漏,就是说内存中的对象确实都还必须存活,那就应该检查虚拟机的堆参数-Xmx(最大堆大小)和-Xms(初始堆大小),与机器物理内存对比看是否可以调大。

  如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError。

  如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError。

  内存泄漏的根本原因是长生命周期的对象持有短生命周期对象的引用,尽管短生命周期的对象已经不再需要,但由于长生命周期对象持有它的引用而导致不能被回收。

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

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

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

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

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

  像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,从而造成内存泄漏,因为他们也将一直被Vector等引用着。

  在这个例子中,循环申请Object 对象,并将所申请的对象放入一个Vector 中,如果仅仅释放引用本身(o=null),那么Vector 仍然引用该对象,所以这个对象对GC 来说是不可回收的。因此,如果对象加入到Vector 后,还必须从Vector 中删除,最简单的方法就是将Vector对象设置为null。

  当一个对象被存储到HashSet集合中以后,修改了这个对象中那些参与计算哈希值的字段后,这个对象的哈希值与最初存储在集合中的就不同了,这种情况下,用contains方法在集合中检索对象是找不到的,这将会导致无法从HashSet中删除当前对象,造成内存泄漏,举例如下:

  在java 编程中,我们都需要和打交道,通常一个应用当中会用到很多,我们会调用一个控件的诸如addXXXListener()等方法来增加,但往往在释放对象的时候却没有记住去删除这些,从而增加了内存泄漏的机会。

  比如数据库连接(dataSourse.getConnection()),网络连接(socket)和io连接,除非其显式的调用了其close() 方法将其连接关闭,否则是不会自动被GC 回收的。对于Resultset 和Statement 对象可以不进行显式回收,但Connection 一定要显式回收,因为Connection 在任何时候都无法自动回收,而Connection一旦回收,Resultset 和Statement 对象就会立即为NULL。但是如果使用连接池,情况就不一样了,除了要显式地关闭连接,还必须显式地关闭Resultset Statement 对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement 对象无法释放,从而引起内存泄漏。这种情况下一般都会在try里面去连接,在finally里面释放连接。

  如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露。

  不正确使用单例模式是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露,考虑下面的例子:

  显然B采用singleton模式,它持有一个A对象的引用,而这个A类的对象将不能被回收。想象下如果A是个比较复杂的对象或者集合类型会发生什么情况。

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 什么叫内存溢出?内存泄漏的定义又是什么?使… (03-13)
    普通电脑内存 巨丰午评:创业板迎强势反弹 电池板块整体走强 (03-12)
    普通电脑内存 锐龙7 7800X3D首测:3299元功耗80W 游戏帧数吊… (03-12)
    普通电脑内存 iphone5内存 (03-12)
    普通电脑内存 windows11内存占用过高怎么办 windows11内存占… (03-10)
    普通电脑内存 Intel中国宣布搭载Core i9+i7+i5+处理器的电脑… (03-10)
    普通电脑内存 AI创投周报|Claude 3能力超越GPT-4企业级AI助… (03-10)
    普通电脑内存 i59600kf配什么内存条频率 (03-09)
    普通电脑内存 内存条的DR2和DR3是什么意思?区别在哪? (03-09)
    普通电脑内存 Addlink 推出 Spider 4  X4 系列内存:最高 4… (03-09)
    普通电脑内存 Xbox Series X细节:NVMe SSD将作为虚拟内存提… (03-08)
    普通电脑内存 超能课堂(275):从10变成10Windows系统35年变… (03-08)
    普通电脑内存 基于华为openEuler的《操作系统》课程教与学 … (03-08)
    普通电脑内存 内存 - OFweek通信网 (03-07)
    普通电脑内存 内存_爱思助手 (03-07)
    普通电脑内存 大算力时代如何打破内存墙 (03-07)
    普通电脑内存 【2024年3月】3月装机走向与推荐(市场分析部… (03-06)
    普通电脑内存 128GB成起步1TB版本开始出现手机内存缘何越来… (03-06)
    普通电脑内存 显卡专用视频内存是什么意思显卡专用内存 (03-06)
    普通电脑内存 电脑密码忘记了怎么办 (03-05)