强引用
强引用就是我们常见的普通对象引用,只要还有强引用指向一个对象,对象就不会被垃圾收集器回收。
Object o = new Object(); //强引用
一个方法的内部有强引用,引用是保存在栈中的,引用指向的内容是保存在堆中的。方法运行完成后,会退出方法栈,引用计数变为0,这个对象就会被回收。
对于全局变量,需要将对象赋为null才能被回收。
只要超出了引用作用域或者赋值为null,就可以被回收,回收时机要看具体的回收策略。
软引用
软引用(SoftReference),可以让对象豁免一些垃圾收集,当内存不足时,在OutOfMemoryError之前会对软引用的对象进行回收。软引用可以和引用队列(ReferenceQueue)联合使用,回收软引用指向的对象时,将软引用加入与之相关联的引用队列中,通过使用队列的poll方法来检查关心的对象是否已被回收,如何队列是空的,则返回null,否则返回队列中前面的一个Reference对象。软引用可以用于实现内存敏感的缓存,当内存充足时,可以暂时保留缓存,内存不足时则清理缓存。
网友评论