24.内存泄漏定义及常见示例
24.1 题目
内存泄漏指什么?常见的内存泄漏有哪些?
24.2 深入解析
内存泄漏(Memory Leak)是指程序中不再使用的对象由于仍被某些引用持有,无法被 GC 回收,导致内存持续增长直至耗尽。常见的泄漏场景包括:
静态引用
- 静态变量或单例持有对对象的引用,即使对象已不再需要,也不会被清理。
事件与委托遗漏注销
- 对象在订阅事件后未及时使用
-=注销,导致发布者持续持有对订阅者的引用。
- 对象在订阅事件后未及时使用
未释放的非托管资源
- 打开的文件流、数据库连接、GDI 对象等没有调用
Dispose()或未使用using语句块。
- 打开的文件流、数据库连接、GDI 对象等没有调用
长生命周期集合
- 将对象添加到全局列表、字典或缓存后没有清理,集合持续膨胀。
闭包与定时器
- 匿名方法或计时器回调捕获外部变量,导致外部对象不能被释放。
内存泄漏的危害:随着运行时间增长,堆内存无法回收,应用会出现卡顿、延迟,严重时抛出 OutOfMemoryException。
24.3 答题示例
“内存泄漏是指不再使用的对象由于仍被引用,导致 GC 无法回收,从而持续占用内存引发性能问题。常见原因包括静态变量、未注销的事件/委托、未释放的非托管资源和长期缓存等,面试中可举例说明并强调
Dispose和注销订阅的重要性。”
24.4 关键词联想
- 内存无法回收
- 静态引用
- 事件注销 (
-= Subscribe) - Dispose / using
- 长生命周期集合
- 闭包 & 定时器
- OutOfMemoryException
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com