关于JAVA的垃圾回收机制-引用分类

关于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值