关于JAVA的垃圾回收机制-引用分类
引用分类:
是指垃圾回收机制在运行的时候,是否能有效地控制引用所指向的那个对象是否需要回收。
对象所占用的区域是否需要回收
强引用:StrongReference 对象运行时不回收
软引用:SoftReference运行时可能回收(JVM内存不够时)
弱引用:WeakReference GC运行时立刻回收 (WeakHashMap键为弱类型,gc运行时立即回收)
虚引用:PhantomReference类似于无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列(ReferenceQueue)联合使用
另外,字符串常量池共享,是不能回收的。
弱引用被回收:
public class RefDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("xxxx yyyy zzzz");
//弱引用管理对象
WeakReference<String> wr = new WeakReference<String>(str);
System.out.println("GC运行前"+wr.get());
//断开引用
str = null;
//通知回收
System.gc();
System.runFinalization();
System.out.println("GC运行后"+wr.get());
}
}
输出:
GC运行前xxxx yyyy zzzz
GC运行后null
弱引用被回收,常量池未被回收:
public static void main(String[] args) {
// TODO Auto-generated method stub
WeakHashMap<String,String> map= new WeakHashMap<String,String>();
//测试数据
//常量池对象不会回收
map.put("abc", "a");
map.put("d", "test");
//弱引用类型被回收
map.put(new String("e"), "c");
map.put(new String("dsf"), "d");
//通知回收
System.gc();
System.runFinalization();
//查看Map中还有几个对象
System.out.println(map.size());
}
结果:2