美文网首页
内存问题:内存泄漏产生的原因与排查方案?

内存问题:内存泄漏产生的原因与排查方案?

作者: 程序狮 | 来源:发表于2021-03-23 17:56 被阅读0次

原因

程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费。
长生命周期对象持有短生命周期对象强引用,从而导致短生命周期对象无法被回收!

注意这里是持有对象的强引用,如果是持有对象的软引用或者是弱引用或者是虚引用则不会造成内存泄漏。

解决方案

软引用,弱引用

软引用:定义一些还有用但并非必须的对象。对于软引用关联的对象,GC不会直接回收,而是在系统将要内存溢出之前才会触发GC将这些对象进行回收。

弱引用:同样定义非必须对象。被弱引用关联的对象在GC执行时会被直接回收。

// 软饮用

User user = new User();

SoftReference<User> userSoftReference = new SoftReference<>(user)

Log.i(“tag”, userSoftReference.getName());

user = null

System.gc();

Log.i(“tag”, userSoftReference.getName());
//弱引用

User user = new User();

WeakReference<User> userWeakReference = new WeakReference<>(user)

Log.i(“tag”, userWeakReference.getName());

User = null

System.gc();

Log.i(“tag”, userWeakReference.getName());

排查方案

AndroidStudio自带插件Profile

第三方库LeakCannary

相关文章

网友评论

      本文标题:内存问题:内存泄漏产生的原因与排查方案?

      本文链接:https://www.haomeiwen.com/subject/eylvcltx.html