java的引用类型
作者:bin一、强引用
我们正常new一个对象,就是强引用
String hello = new String(“value”);
二、弱引用
重点讲弱引用,释义就是:被弱引用的对象,如果没有其他强引用,那么在gc的时候,就会被回收调
import java.lang.ref.WeakReference; /** * 弱引用回收测试 */ public class WeakReferenceDemo { public static WeakReference<String> weakReference1; //对比 //public static String hellos; public static void main(String[] args) { test1(); //可以输出hello值,此时两个弱引用扔持有对象,而且未进行gc System.out.println("未进行gc时,只有弱引用指向value内存区域:" + weakReference1.get()); //此时已无强一用执行"value"所在内存区域,gc时会回收弱引用 System.gc(); //此时输出都为nuill System.out.println("进行gc时,只有弱引用指向value内存区域:" + weakReference1.get()); } public static void test1() { String hello = new String("value"); //对比 //hellos = hello; weakReference1 = new WeakReference<>(hello); System.gc(); //此时gc不会回收弱引用,因为字符串"value"仍然被hello对象强引用 System.out.println("进行gc时,强引用与弱引用同时指向value内存区域:" + weakReference1.get()); } }
输出:
进行gc时,强引用与弱引用同时指向value内存区域:value 未进行gc时,只有弱引用指向value内存区域:value 进行gc时,只有弱引用指向value内存区域:null
为了对比,我们将注释打开,此时hello被强引用,即不会被gc回收
输出为:
进行gc时,强引用与弱引用同时指向value内存区域:value 未进行gc时,只有弱引用指向value内存区域:value 进行gc时,只有弱引用指向value内存区域:value