android中WeakReference、SoftReference使用用法?
------解决思路----------------------
你理解的基本没错,但是忽略了java有个常量池的概念
将你代码里面的
Object s1 = "abcdef";
Object s2 = "123456";
改成
Object s1 = new String("abcdef");
Object s2 = new String("123456");
之后你在测试,就会发现 weakref.get()==null 了
之前的测试不成功的原因在于,s1和s2指向的并不是java heap上面的对象,而是常量池中的对象,常量池中的对象是不会被gc释放的,所以weakref.get()不会为null。
修改之后的代码中,s1和s2都是指向分配在java heap上的对象,所以你调用system.gc后,weakref就会被释放了,至于softref则要看什么时候完全没内存了才会释放