内存泄露,如何判断是资源泄露还是堆栈泄露?

作为软件测试工程师,判断内存泄露类型对于定位和解决问题至关重要。以下是区分资源泄露和堆栈泄露的方法:

1. 基本概念区分

资源泄露(Resource Leak)

  • 指非内存资源未正确释放,如文件句柄、数据库连接、网络套接字等

  • 虽然不直接表现为Java堆内存增长,但会导致系统资源耗尽

堆栈泄露(Memory Leak)

  • 指应用程序中对象不再被使用,但无法被GC回收

  • 直接表现为Java堆内存持续增长,最终导致OOM

2. 判断方法

资源泄露的判断特征:

  • 监控指标:观察文件描述符数量、线程数、TCP连接数等非堆指标

  • 错误表现:出现"Too many open files"、"Can't create more threads"等错误

  • 工具检测

    • Linux下使用lsof -p [pid]查看进程打开的文件

    • 使用jstack查看线程数量是否异常增长

    • 使用JProfiler/VisualVM的"监视器&线程"标签

  • 典型场景

    • 未关闭的InputStream/OutputStream

    • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值