Android内存泄漏分析及实践(二)
来源:互联网 发布:不符合淘宝认证要求 编辑:程序博客网 时间:2024/05/20 07:36
Android内存泄漏分析及实践(二)
通过《Android内存泄漏分析及实践(一)》我们得到结论:可以通过查询ReferenceQueue是否包含WeakReference实例,判断弱引用指向的对象 o是否被系统回收。所以根据这个理论我们可以写一个简单的内存泄露分析工具。
import java.lang.ref.Reference;import java.lang.ref.ReferenceQueue;import java.lang.ref.WeakReference;public class CheckWhenAnObjectIsNoLongerReferenced { private static Object object; public static void main(String[] args) { object = new Object(); // Reference queue, to which registered reference objects are appended // by the // garbage collector after the appropriate reachability changes are // detected. ReferenceQueue<Object> rq = new ReferenceQueue<Object>(); // Create a new weak reference that refers to the given object and is // registered with this queue. WeakReference<Object> wr = new WeakReference<Object>(object, rq); // start a new thread that will remove all references of object new Thread(runnable).start(); // wait for all the references to the object to be removed try { Reference<?> r = null; while ((r = rq.remove()) != null) { if (r == wr) { System.out.println("Object is no longer referenced."); break; } } } catch (InterruptedException e) { e.printStackTrace(); } } private static Runnable runnable = new Runnable() { @Override public void run() { try { Thread.sleep(1000); System.out.println("Setting object to null"); object = null; System.out.println("Running Garbage Collection..."); Runtime.getRuntime().gc(); // run GC to collect the object } catch (Exception e) { e.printStackTrace(); } } };}
Output:
Setting object to null
Running Garbage Collection…
Object is no longer referenced.
1 0
- Android内存泄漏分析及实践(二)
- Android内存泄漏分析及实践(一)
- Android内存泄漏分析及实践(三)-leakCanary
- Android内存泄漏分析及实践(一)
- Android内存泄漏及分析
- Android 内存泄漏和OOM分析(二)
- android 内存泄漏分析之二
- Android内存泄漏分析及调试(转)
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- Android内存泄漏分析及调试
- 判断复选框是否被选中
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- OpenSSH, ssh成功 sftp失败的可能原因
- sys 忘密码
- 【转载】android中MVP模式
- Android内存泄漏分析及实践(二)
- 自定义时间组件
- 浅谈 MVP in Android
- Android Volley增加Https支持,允许SSL
- Unmarshalling unknown type code 7667758 at offset 420
- js-全选
- 最常用的vim快捷键
- 马尔可夫决策过程MDP
- 数据库集合运算与关系代数