强引用,软引用,弱引用
Posted Fly博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强引用,软引用,弱引用相关的知识,希望对你有一定的参考价值。
/** * 强引用 * 强引用设置为空,对象立马会被回收 **/ public class NormalReference { public static void main(String[] args) { M m=new M(); m=null; System.gc(); } } class M{ @Override public void finalize() throws Throwable { System.out.println("finalize"); } } /** * 软引用 * 软引用当引用存在的时候,只有当内存不足的时候才去回收 **/ public class T0_SoftReference { public static void main(String[] args) { SoftReference<byte[]> m=new SoftReference<>(new byte[1024*1024*10]); System.out.println(m.get()); System.gc(); try{ TimeUnit.SECONDS.sleep(1); }catch (Exception e){ e.printStackTrace(); } System.out.println(m.get()); //再重新分配一个数组,heap将装不下,这个时候系统会垃圾回收,先回收一次,如果不够,才把软引用干掉 byte[] b=new byte[1024*1024*15]; System.out.println(m.get()); } } /** * 弱引用 只要碰到垃圾回收器回收就立即被回收 * ThreadLocal里面就用到了弱引用,防止内存泄漏 **/ public class T0_WeakReference { public static void main(String[] args) { WeakReference<M> m=new WeakReference<>(new M()); System.out.println(m.get()); System.gc(); System.out.println(m.get()); } }
以上是关于强引用,软引用,弱引用的主要内容,如果未能解决你的问题,请参考以下文章