java中强引用,软引用,弱引用,虚引用

1、强引用

强引用是最普遍的引用,我们一般new创建出来的对象的引用都为强引用。强引用不会被jvm强制回收,就算jvm内存不够继续分配,抛出OOM,也不会随意回收强引用。

public class A {
public void aa()
{
System.out.println("引用测试");
}
}

A a = new A();

2、软引用

如果一个对象只有软引用,如果jvm内存空间足够,则不会回收它,如果内存空间不够,就会回收它。软引用一般用来实现比较敏感的高速缓存。

public class A {
public void aa()
{
System.out.println("引用测试");
}
}

public class TestReference {
public static void main(String[] args) {
A a = new A();
SoftReference<A> ref = new SoftReference<A>(a);
ref.get().aa();
}
}

运行结果:引用测试

3、弱引用

弱引用的对象拥有更短暂的生命周期,只要垃圾回收器的线程扫描到弱引用的对象,不管当前jvm内存是否够不够,都会回收掉弱引用的对象。不过,由于垃圾回收器是一个优先级很低的线程,所以不一定会很快发现那些弱引用的对象。

public class A {
public void aa()
{
System.out.println("引用测试");
}
}

 

 

public class TestReference {
public static void main(String[] args) {
A a = new A();
WeakReference<A> ref = new WeakReference<A>(a);
ref.get().aa();
}
}

运行结果:引用测试

4、虚引用

虚引用与上面几种引用都不同,并不会决定对象的生命周期。如果一个对象仅只有虚引用,那就和没有任何引用一样,在任何时候都可能被回收。虚引用与软引用和弱引用的还有一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。虚引用主要用来跟踪对象被垃圾回收器回收的活动

public class A {
public void aa()
{
System.out.println("引用测试");
}

}

public class TestReference {
public static void main(String[] args) {
A a = new A();
ReferenceQueue<A> queue = new ReferenceQueue<A>();
PhantomReference<A> ref = new PhantomReference<A>(a, queue);
ref.get().aa();
}

}

运行结果:Exception in thread "main" java.lang.NullPointerException

参考博文:http://www.cnblogs.com/skywang12345/p/3154474.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值