-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-03-12:一般什么情况下会导致内存泄漏问题? #3
Comments
|
楼上总结的不错,想纠正一点:2. ListView 的 Adapter 中没有使用缓存的 ConvertView。因为前两天刚看了ListView源码,ConvertView其实是滑出屏幕的View的缓存,不使用ConvertView会频繁创建新的View对象,只会造成内存溢出,而不是内存泄漏。这个问题我们首先要明白内存泄漏的真正原因:A对象引用B对象,但是A对象的生命周期比B对象的生命周期长的多,B生命周期到了还在被A引用,导致B对象不能回收,从而引起内存泄漏 |
纠正一点,bitmap早就不需要手动调用recycle了,可以看看这篇文章:https://www.jianshu.com/p/76bbdc4bcad8 |
Android中常见的:资源对象未关闭、全局集合类强引用、广播接收器或是EventBus等未反注册、Context的错误使用以及Context与单例的问题、非静态内部类与Handler的问题。 |
需要被释放的资源没有被及时释放 就会造成内存泄漏 。 1.handler 消息 |
1、内存泄漏的根本原因在于生命周期长的对象持有了生命周期短的对象的引用 |
总的来说就是生命周期长的对象持有了生命周期短的对象,导致生命周期短的对象在回收时导致对象无法释放,从而导致内存泄漏。 |
内存泄漏造成的原因 内存泄漏出现的场景: 解决办法: |
从这个内存泄漏的主题,还可以引出的知识点:
|
1.非静态内部类(非静态内部类默认持有外部类的引用,例如Handler:消息队列里的消息持有handler的引用,handler作为内部类持有外部类的引用) |
1.资源未关闭释放(如数据库操作未关流) |
非静态内部类对外部有一个引用 检测方式有以下几种 |
都忽略了内存泄漏的定义,应该是当GC来临时,本该释放回收的对象,因为被其他对象持有,导致无法释放;注意和内存溢出的区别 |
这个问题应该从内存抖动,内存泄露,内存溢出三个纬度讲解,再结合线上和线下的监控手段 |
内存泄漏原因 |
No description provided.
The text was updated successfully, but these errors were encountered: