JVM中的引用类型

                                                            引用类型

             无论是引用计数法,还是搜索算法都是引用操作,那么就可能产生垃圾的问题。在很多时候,并不是所有对象都是被我们一直使用,所以在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());// 任何时候取得都是空,因为只要垃圾回收,对象就会被回收。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值