【Java引用规范】虚引用以及引用队列
发布网友
发布时间:2024-10-03 02:01
我来回答
共1个回答
热心网友
时间:2024-10-19 12:29
Java提供了四种引用类型:强引用、软引用、弱引用和虚引用。在这其中,虚引用是较为特殊的一种,它主要用于跟踪对象是否处于可以被垃圾回收的状态。
引用实例指的是软引用、弱引用、虚引用等,而引用对象则是由引用实例所指向的对象。
虚引用(Phantom Reference)的用途包括监测对象是否已经没有引用关系了(可被垃圾处理器回收),以便在对象即将被回收时执行一些资源回收动作。在JDK9中,sun工具包中有一个名为Cleaner的工具类,就是利用虚引用的特性来自动释放资源,以避免资源占用和浪费。
与其他引用类型的区别在于,软引用和弱引用都会在垃圾回收时进行垃圾回收,而虚引用则不同。垃圾回收器会将引用实例放入引用队列中,然后从引用队列中取出,断开虚引用和引用对象的关系后,才会被垃圾回收器回收。
创建和使用虚引用需要与引用队列搭配使用。虚引用有且仅有一个构造方法,需要与引用队列一起使用。当JVM监测到引用对象要被回收时,虚引用将会被添加到引用队列中。
引用队列是用来配合引用工作的,不同类型的引用在对象被垃圾回收前会有不同的行为。引用队列的特点是根据引用的不同,进入引用队列后引用对象的状态也不一致。
以下是一个结合引用队列监控对象生命周期的示例:假设有一个共享资源对象,在多个线程中同时使用。在使用完后,需要等待对象回收后释放资源。此时,虚引用可以监听到对象的垃圾回收动作,从而在准备回收时关闭相关资源。在上面的工具类中,有一个静态方法addAutoClose用于自动释放对象所占用的资源,主要逻辑是新开了一个线程,在线程中循环地从引用队列中获取虚引用,根据反射从虚引用中获取引用对象,从而调用引用对象的Close方法。
热心网友
时间:2024-10-19 12:30
Java提供了四种引用类型:强引用、软引用、弱引用和虚引用。在这其中,虚引用是较为特殊的一种,它主要用于跟踪对象是否处于可以被垃圾回收的状态。
引用实例指的是软引用、弱引用、虚引用等,而引用对象则是由引用实例所指向的对象。
虚引用(Phantom Reference)的用途包括监测对象是否已经没有引用关系了(可被垃圾处理器回收),以便在对象即将被回收时执行一些资源回收动作。在JDK9中,sun工具包中有一个名为Cleaner的工具类,就是利用虚引用的特性来自动释放资源,以避免资源占用和浪费。
与其他引用类型的区别在于,软引用和弱引用都会在垃圾回收时进行垃圾回收,而虚引用则不同。垃圾回收器会将引用实例放入引用队列中,然后从引用队列中取出,断开虚引用和引用对象的关系后,才会被垃圾回收器回收。
创建和使用虚引用需要与引用队列搭配使用。虚引用有且仅有一个构造方法,需要与引用队列一起使用。当JVM监测到引用对象要被回收时,虚引用将会被添加到引用队列中。
引用队列是用来配合引用工作的,不同类型的引用在对象被垃圾回收前会有不同的行为。引用队列的特点是根据引用的不同,进入引用队列后引用对象的状态也不一致。
以下是一个结合引用队列监控对象生命周期的示例:假设有一个共享资源对象,在多个线程中同时使用。在使用完后,需要等待对象回收后释放资源。此时,虚引用可以监听到对象的垃圾回收动作,从而在准备回收时关闭相关资源。在上面的工具类中,有一个静态方法addAutoClose用于自动释放对象所占用的资源,主要逻辑是新开了一个线程,在线程中循环地从引用队列中获取虚引用,根据反射从虚引用中获取引用对象,从而调用引用对象的Close方法。