java中弱引用是怎么回事啊?

 我来答
zhouchunooo
2012-10-16
知道答主
回答量:45
采纳率:0%
帮助的人:14.6万
展开全部
如果一个对象只具有弱引用,那就类似于可有可物的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
当gc碰到弱可及对象,并释放abcWeakRef的引用,收集该对象。但是gc可能需要对此运用才能找到该弱可及对象。通过如下代码可以了明了的看出它的作用:
String abc=new String("abc"); WeakReference<String> abcWeakRef = new WeakReference<String>(abc); abc=null; System.out.println("before gc: "+abcWeakRef.get()); System.gc(); System.out.println("after gc: "+abcWeakRef.get());

运行结果:
before gc: abc
after gc: null
gc收集弱可及对象的执行过程和软可及一样,只是gc不会根据内存情况来决定是不是收集该对象。
如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。
A obj = new A(); WeakReference wr = new WeakReference(obj); obj = null; //等待一段时间,obj对象就会被垃圾回收   ...   if (wr.get()==null) {   System.out.println("obj 已经被清除了 ");   } else {   System.out.println("obj 尚未被清除,其信息是 "+obj.toString());   }   ... } 在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果返回值为 null 的话,代表此对象已经被清除。
这类的技巧,在设计 Optimizer 或 Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。
xiaowife20
2012-10-16 · 超过35用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:71.6万
展开全部
弱引用就是聚合
强引用就是组合
聚合(Aggregation)是一种弱“拥有”关系,体现的是A对象可以包含或者说是拥有B对象,但是B对象不属于A对象的一部分,比如人可以拥有一个女朋友,但是这个女的不属于他这个人身体的一部分。同时聚合也不会随着对象A的创建而立马创建,而是当某外部因素导致了对象B的创建。(人和鼠标,人和电脑,人和猪,人和狗)
eg:
class Gril{
}
class Boy{
private Gril girl;
void getGril{
gril=new Gril();
}
}
组合(Composition)是一种强的“拥有关系”,体现了严格的包含关系,部分和整体的关系,比如你有两只手,手和你组合关系,生命周期一样,我的理解他们生命周期的一样是人死了,手也相当于没了生命,而不是没了手,人就不能活。(人和脚,人和眼睛 and so on)
eg:
class Hand{
}
class Man{
private Hand hand;
Man(){
hand=new Hand();
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
allenzhang555
2012-10-16
知道答主
回答量:60
采纳率:0%
帮助的人:17.2万
展开全部
弱引用(WeakReference)
如果一个对象只具有弱引用,那就类似于可有可物的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回 收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式