引用类型
无论是引用计数法,还是搜索算法都是引用操作,那么就可能产生垃圾的问题。在很多时候,并不是所有对象都是被我们一直使用,所以在JDK1.2之后提出了四种类型:
1,强引用:只要引用存在,永远不会被GC,所以强引用过多会出现outofmemory的信息。例如:
Object obj = new Object();
obj这个对象释放之前会把引用释放掉,obj = null,对象就会被释放,同时引用也会被释放掉。
2,软引用:软引用往往作为缓存组件出现,最大特点在于:内存充足不对对象进行回收,内存不足的时候进行回收。
Object obj = new Object();// 创建对象
String str = "hello";
SoftReference sr = new SoftReference<Object>(obj);// 创建软引用
obj = null;
for(int i =0;i<100000;i++){// 制造内存溢出
str = str+i;
}
System.out.println(sr.get());// get的值为null,说明对象被回收,软引用被回收。
3,弱引用:第二次垃圾回收的时候回收,弱引用使用的是Map接口的子类,弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾。
Object obj = new Object();
WeakReference<Object>wr = new WeakReference<Object>(obj);
obj = null;
System.out.println(wr.get());// get的值为null,说明对象被回收,弱引用被回收。
4,虚引用:垃圾回收的时候就进行回收,虚引用主要是检测对象是否从内存中删除。
Object obj = new Object();
PhantomReference pr = new PhantomReference<Object>(obj);
System.gc();
System.out.println(pr.get());// 任何时候取得都是空,因为只要垃圾回收,对象就会被回收。