java 函数 引用_java四种引用与回调函数

JAVA四种引用

java对象的引用包括:

强引用

软引用

弱引用

虚引用

Java中提供这四种引用类型主要有两个目的:

第一是可以让程序员通过代码的方式决定某些对象的生命周期;

第二是有利于JVM进行垃圾回收。

实际用例

1.强引用

是指创建一个对象并把这个对象赋给一个引用变量。

比如

Object object =new Object();

String str ="哈哈哈";

强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。

2.软引用

软引用的特点是,如果JVM内存空间充沛,垃圾回收器就不会回收软引用变量。

在回收器对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。另外,一旦垃圾线程回收该Java对象之 后,get()方法将返回null。

举个栗子:

BinarySearch bs = new BinarySearch();//二分查找

bs.find(test, 0, test.length - 1, 5);

SoftReference ruanYinYong = new SoftReference(bs);

bs = null;

ruanYinYong.get().find(test, 0, test.length - 1, 5);//即便强引用已经为Null,但是软引用还可以继续用。

如果存在强引用同时与之关联,则进行垃圾回收时也不会回收该对象。(弱引用也是如此)

3.弱引用

WeakReferencereference=new WeakReference(new People("zhouqian",20));

System.out.println(reference.get());

System.gc();//通知垃圾回收器回收资源

System.out.println(reference.get());

第一个输出,第二个输出为null

4.虚引用

java中使用PhantomReference来表示虚引用。就像某个对象没有引用与之关联一样,若某个对象与虚引用关联,那么在任何时候都可能被JVM回收掉。虚引用不能单独使用,必须配合引用队列一起使用。

当垃圾回收器发现对象与虚引用关联,就会在回收它之前,将这个虚引用加入到引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被回收,从而进行操作。

ReferenceQueue queue = new ReferenceQueue<>();

PhantomReference str = new PhantomReference("chx", queue);

System.out.println(str.get());

5.软引用结合回调函数使用

import java.lang.ref.SoftReference;

public class CallBackMain {

SoftReference ruanYinYong = new SoftReference(new CallBackTest());

public static void main(String[] args) {

new CallBackMain().startCallBack();

}

public void startCallBack() {

System.out.println("我去做别的了");

ruanYinYong.get().callBack();

}

}

class CallBackTest {

public static int b = 1;

public void callBack() {

System.out.println("我是回调函数" + b);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值