博为峰老师直接接听

400-029-09** 400-029-0997 转 18567
查看完整号码
扫码拨号
微信扫码拨号

为什么会发生内存泄露?

作者:博为峰 来源:博为峰 2023年07月11日 更新

今天我们一起来谈谈 内存泄露 内存泄露与资源泄露 什么是泄露?泄露在计算机语境下,通常指的是某个资源无法被访问,也无法被释放。 内存泄露一般发生在某个对象的引用丢失,无法再访问到该引用,但是该引用却依旧引用着某个对象,导致这个对象无法回收,最终导致内存溢出OOM。 资源泄露一般发生在连接池,IO流等...

今天我们一起来谈谈 内存泄露 内存泄露与资源泄露 什么是泄露?泄露在计算机语境下,通常指的是某个资源无法被访问,也无法被释放。 内存泄露一般发生在某个对象的引用丢失,无法再访问到该引用,但是该引用却依旧引用着某个对象,导致这个对象无法回收,最终导致内存溢出OOM。 资源泄露一般发生在连接池,IO流等场景,如从连接池中每次都新建连接但不关闭,每次都打开新的IO流但不关闭,等等情况。 内存泄露发生的情况 内存泄露多发生于static的集合中,比如当你定义了一个static HashMap,此时将某个key-value放入其中后,方法段结束。 这时,除非调用map的clear方法,否则显然该value将无限持有对象的引用,无法释放。 这种写法看似可笑,却很难避免,尤其在大量框架代码中,反而更容易发生,因为大部分框架代码对业务代码的增强,都是通过AOP方式来做的,此时对业务代码来说,这类隐式的static Map难以防范。 确认是否是内存泄漏 内存使用过高,一定是内存泄露吗? 内存使用过高,并不一定是内存泄露导致的结果,具体要看内存堆的分析。 一般内存泄露*直观的体现就是: 内存使用高; GC回收不了内存,即GC前后堆大小几乎无变化; JVM疯狂GC,CPU打满; Java进程触发Linux操作系统的OOM-killer,Java进程被杀死; 或者CPU被GC任务打满,服务器实际宕机。 但是这不一定是泄露导致的,也有可能是内存的错误使用导致的,不过大同小异,主要还是需要排查异常内存的使用。 之所以作者这么说,是因为作者曾经在线上遇到了架构组修改日志框架,错误的将日志内容作为了key存入了map,本应的key-value应该为traceId-日志内容,结果架构组却将key-value搞反了,导致大量的巨大key打满了内存,堆dump文件里全是几十k几十k的字符串。 如何避免内存泄露 根据上面说的内存泄露多数发生的情况,避免内存泄露的策略也就十分简单了。 尽量使用局部变量; 减少使用static集合; 如果必要的使用static集合,尽量使用弱引用等低级引用。 内存泄露问题如何排查 内存泄露或内存持续使用较高时,通常通过堆的情况来排查。 首先可以通过jmap -histo:live pid|less 命令,查看堆内对象使用情况。 此时如果内存泄露,一般都是会某个基本类型对象过多,然后可以与正常的服务作对比,看哪个对象的数量异常的多,此时如果可以判断出来,也没必要dump了。 如果通过jmap无法断定,则可以使用jmap -dump:live,format=b,file= 命令,生成dump文件。 将dump文件通过java原生的软件或者eclipse的mat工具,就可以看到哪些对象占用过多,此时你应该关注的是非基本类型对象的其他对象,因为一般来说都是基本类型的数量和大小*多。 一般来说,你会看到以下现象: 某个map的Node十分多,有几十万个; 某个框架的某个对象十分多; char数据,也就是C[],占用十分多,因为有很多大字符串。 本文经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系进行删除 点击下方 “阅读原文” ,寻找职业新风向 ~
添加微信咨询
小博老师 @成都博为峰

提供专业的课程咨询服务

微信号:bwf******zx

立即咨询

    相关资讯

  • 离职后怀念前公司?别错怪它变好了,是你看待工作的方式变了

    你是否有这样的感受:当初铁了心要离开前公司,可真的离职或跳槽到新单位后,过不了多久就会发现,原来前公司好像也没那么差,甚至还挺不错的。其实,这种感受并非个例,背后藏着对工作本质的认知变化,以及决策时容易出现的偏差,值得好好琢磨。01从工作本身来看从工作本身的属性来看,...

    2025/8/27 2:32:31
  • *高月薪20k!销售转行测试工程师,他说:没技能,想赚钱,学测试就对了!

    “这个专业就业怎么样?”“这个专业薪资怎么样?”这是每年高考后志愿填报*常听到的问题……很多学生在进入大学前,对自己所选的专业知之甚少。他们可能只是听别人说某个专业热门、好就业,或是觉得某个专业名称听起来“高大上”,就匆匆做出了选择。进入大学后,随着对专业课程和行业内...

    2025/8/27 2:32:31
  • 小米汽车Q2交付8w+台!车载测试岗位又火了?实习生年薪近20w?

    19日晚,雷军在网上晒出了小米集团Q2的“*单”。图片来源网络,侵删汽车业务方面,智能电动汽车及AI等创新业务分部收入突破200亿元,开始步入规模化增长快车道。第二季度小米汽车交付量持续攀升,单季交付81302台,截至7月10日,累计交付量已超30万台,其中7月单月交...

    2025/8/22 2:34:53
  • 职场上,不想被淘汰,就别混日子

    在职场中,常有这样的一种声音:“都是混日子而已,拿到工资就行,别那么较真。”但现实真的那么轻松吗?其实不然,想在职场立足并有所发展,随意对待工作绝非良策。真正能在职场顺风顺水的人,往往懂得管住嘴、手脚勤快、保持内核稳定,用正确的状态对待工作,工作自然也会回馈以顺利。0...

    2025/8/22 2:34:53
  • 腾讯校招放大招!“无限复活甲”+专项计划,应届毕业生必看

    作为互联网行业的企业,腾讯的综合实力早已被市场和用户广泛认可。腾讯每一次的校园招聘,都吸引着众多应届毕业生的目光,而本次校招更是在多个方面展现出独特的优势。本次校招的亮点众多:首先,投递时间得到了延长,覆盖了2025年1月至2026年12月毕业的学生。为更多处于不同毕业阶段的学子提供了充足的准备时间...

    2025/8/12 2:41:29

“成都博为峰”是成都市锦江区博为峰职业技能培训学校有限公司在教育宝平台开设的店铺,若该店铺内信息涉嫌虚假或违法,请点击这里向教育宝反馈,我们将及时进行处理。

机构评分

环境:4.0师资:4.0服务:4.0效果:4.0

公示信息

店铺名称:成都博为峰

单位名称:成都市锦江区博为峰职业技能培训学校有限公司

账号名称:cdbwfjy(180******75)

所属城市:四川成都

入驻时长:22年

在线客服:在线聊

微信咨询

返回顶部