虚引用(PhantomReference)是java中特有的引用类型,它不会影响指向的对象的生存周期,它的存在只是为了方便某些系统底层的清理机制。使用虚引用的使用场景如下:1. 回收对象前的准备工作:虚引用可以用作对象被收集前提前释放系统资源的手段,提前释放系统资源有利于高效地执行垃圾回收,减少内存溢出。2. 监测堆内存状况...
publicstaticvoidmain(String[] args){// 新建一个对象,开辟一个内存空间Userobj=newUser();// 存储被回收的对象ReferenceQueue<User> QUEUE =newReferenceQueue<>();// phantomReference使用虚引用指向这个内存空间UserPhantomReferencephantomReference=newUserPhantomReference(obj, QUEUE);// 释放这个内存空间,此时只有pha...
虚引用最常见的使用场景是文档中复用的内容。例如,在一篇报道文章中,作者可能会引用某些重要的句子,以便对文章进行链接。这时,如果作者想更新其内容,只要在引用处更新文本,其他引用该文本的地方也会同步更新。此外,虚引用也可以用于创建多文档引用体系,来实现文档之间,不同部分之间的连接。 此外,虚引用还可用于在网络...
虚引用在实际编程中主要用于以下场景: 资源管理和对象生命周期监控:在需要释放资源的同时监控对象生命周期的场景中,虚引用可以发挥重要作用。例如,在管理文件或网络连接时,可以使用虚引用来执行资源释放操作,并在对象被回收时发送通知或记录日志。 内存管理和缓存清理:结合虚引用与缓存管理可以实现更加智能和高效的缓存系统...
五、虚引用 1. 每次垃圾回收时都会被回收,主要用于监测对象是否已经从内存中删除 2. 虚引用必须和引用队列关联使用, 当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中 3. 程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收...
虚引用的使用场景 在实际开发中,虚引用的使用场景相对较少。主要有以下几种情况: 监控对象是否被回收 虚引用可以用于监控对象是否被垃圾回收器回收。通过ReferenceQueue,我们可以在对象被回收之前获得通知,并进行一些相关的清理操作。 importjava.lang.ref.PhantomReference;importjava.lang.ref.Reference;importjava.lang.re...
使用场景: 可以用来跟踪对象呗垃圾回收的活动。一般可以通过虚引用达到回收一些非java内的一些资源比如堆外内存的行为。例如:在 DirectByteBuffer 中,会创建一个 PhantomReference 的子类Cleaner的虚引用实例用来引用该 DirectByteBuffer 实例,Cleaner 创建时会添加一个 Runnable 实例,当被引用的 DirectByteBuffer 对象不可达...
强引用是我们使用最频繁的,如果一个对象具有强引用,那Gc就不会回收,当内存不足时,java虚拟机就会抛出OOM的错误你(也就是OutOfMemoryError),使程序异常终止,也不会随意回收具有强引用的对象来解决内存不足问题。 通过引用,可以对堆中的对象进行操作,在某个方法中,当创建一个对象,该对象被分配到堆中,通过这个...
虚引用比较特殊,它的使用场景不常见,多半是用来进行垃圾回收过程的监控,帮助你做一些对象销毁前的清理工作。强引用嘛,几乎在所有你希望保持对象不被回收的地方都会用到。 所以强弱软虚引用不是孤立的,它们可以根据具体的场景,帮助你在内存管理上做到更精细的控制。理解这些概念之后,你会发现它们能在各种情况下大显身...