【Java面试题】如果发生内存泄漏怎么排查

38 篇文章 1 订阅
20 篇文章 3 订阅

“如果发生内存泄漏怎么排查”

昨天,一个工作3年的粉丝,在投递了200多家公司以后,终于约到了面试机会。

由于没有实操过,所以被问到:“如果发生内存泄漏怎么排查这个问题的时候”,就不知道该怎么回答了。

这个问题在我之前整理的大厂面试指南里面,有标准的回答,大家可以扫描文章底部二维码领取。

问题解析

内存泄露的面试频率还挺高的,一方面它是一个比较重要的基础知识,另一方面,我们写的所有程序都是运行在JVM上,

在出现故障的时候,需要开发人员具备解决该问题的能力。

这个问题分为两个部分:

  1. 什么是内存泄露以及会带来什么影响

  2. 内存泄露的排查和解决方法

内存泄漏指的是在程序运行过程中,因为某些原因导致不需要使用的对象,

仍然占用JVM的内存空间并且这块内存还无法被回收。

最终导致程序占用的内存越来越大从而出现OOM错误或者影响程序性能。

一般情况下,除了OOM这种错误以外,内存泄露会有一些比较明显的现象,比如频繁的Full GC; 内存占用量过大一直无法释放等。

下面来看一下这个问题的回答。

问题答案

内存泄露的排查,我一般会根据现象去定位问题。

所以第一步,会先去定位是否是内存泄露,比如老年代逐步增长、fullGC卡顿、年轻代的内存一直在高位无法释放、频繁full gc等。

这些现象基本上都是内存出现异常。

要了解gc的情况,可以使用jstat命令,查看虚拟机中各个内存区域的使用情况和gc情况。

然后使用dump工具,把当前内存dump下来,然后使用MAT工具来分析。

如果dump的文件比较大,可以使用轻量级的在线分析工具jmap。

MAT工具会自动分析dump文件的内容,给出一个分析结果并定位到有问题的类,然后去对这部分代码进行优化即可

一般可能是循环引用、内存对象泄露没有被销毁、动态分配内存以后未释放、长期持有对象引用、资源未关闭等。

总结

下次面试的时候遇到这个问题,大家知道怎么回答了吗?

如果你喜欢我的作品,记得点赞收藏加关注哦!!!

另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!

【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

需要高手面试文档面试文档的小伙伴可以扫描下方二维码
↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值