首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java softreference_Java引用总结–StrongReference、SoftReferenceWeakReferencePhantomReference

Java引用总结–StrongReference、SoftReferenceWeakReferencePhantomReference 1 Java引用介绍 Java从1.2版本开始引入了4种引用,...软引用可以一个引用队列(ReferenceQueue)联合使用,如果软引用所引用对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联引用队列中。...弱引用可以一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联引用队列中。...下面,先通过实例对内存回收有个认识;然后,进一步通过引用实例加深对引用了解。...,对java.util.Date进行了扩展,并重写了finalize()toString()方法。

29430

关于Reference与finalize一点思考研究

背景 最近读了寒泉子关于Finalizer分享 JVM源码分析之FinalReference完全解读 - InfoQ 结合之前对java引用类型了解,突然想到几个开脑洞问题: 如果一个对象没有强引用...PhantomReference进入队列;并且第一次GC后WeakReferencePhantomReference就get不到对象了 实验二 为了触发软引用,我们需要申请一块大内存,看下面改造后main...null java.lang.ref.PhantomReference@1d4c9154 get null>> 第一次gc << 可以看到WeakReferenceSoftReference放入队列后...,PhantomReference也进入队列 结论 到此基本上对整个过程比较清楚了,可以回答开篇问题 SoftReference只有在内存不足时候才会放到队列,WeakReference放入队列先后顺序是随机...实现 无论那种方式,其实都不推荐用来关闭资源,因为虚拟机规范不保证一定能够执行,所以只能用来补救 疑问 最后还有一点疑问,WeakReferenceSoftReference进入队列先后顺序怎么确定

89830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一文读懂javaReference引用类型

    一文读懂javaReference引用类型 简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说,今天介绍一下java引用类型。...java为引用类型专门定义了一个叫做ReferenceReference是跟java垃圾回收机制息息相关,通过探讨Reference实现可以更加深入理解java垃圾回收是怎么工作。...弱引用weak Reference weakReferencesoftReference很类似,不同是weekReference引用对象只要垃圾回收执行,就会被回收,而不管是否内存不足。...SoftReferenceWeakReference不同是,PhantomReference只有一个构造函数,必须传入ReferenceQueue: public PhantomReference...} ReferenceReferenceQueue 讲完上面的四种引用,接下来我们谈一下他们ReferenceReferenceQueue作用。

    34230

    一文读懂javaReference引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说,今天介绍一下java引用类型。 java为引用类型专门定义了一个叫做Reference。...Reference是跟java垃圾回收机制息息相关,通过探讨Reference实现可以更加深入理解java垃圾回收是怎么工作。...弱引用weak Reference weakReferencesoftReference很类似,不同是weekReference引用对象只要垃圾回收执行,就会被回收,而不管是否内存不足。...SoftReferenceWeakReference不同是,PhantomReference只有一个构造函数,必须传入ReferenceQueue: public PhantomReference...} ReferenceReferenceQueue 讲完上面的四种引用,接下来我们谈一下他们ReferenceReferenceQueue作用。

    3.7K40

    强软弱虚引用,只有体会过了,才能记住

    Java四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用。...Java为什么要设计这四种引用 Java内存分配内存回收,都不需要程序员负责,都是由伟大JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说专业点,叫可达性分析。...我们可以手动把关联给中断了,方法也特别简单: o = null; 我们可以手动调用GC,看看如果强引用对象之间关联被中断了,资源会不会被回收,为了更方便、更清楚观察到回收情况,我们需要新写一个...弱引用 弱引用使用软引用类似,只是关键字变成了WeakReferenceWeakReference weakReference = new WeakReference... reference = new PhantomReference(new byte[1], queue); System.out.println(reference.get

    78820

    JVM&GC之java引用

    Jva中引用 Java中提供了四个级别的引用,强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference...软引用 软引用是除了强引用外,最强引用类型。用来描述一些还有用但是并非必须对象,在Java中用java.lang.ref.SoftReference来表示。...也就是说,一旦SoftReference保存了对一个Java对象软引用后,在垃圾线程对 这个Java对象回收前,SoftReference所提供get()方法返回Java对象强引用。...软引用可以一个引用队列(ReferenceQueue)联合使用,如果软引用所引用对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联引用队列中。...图片.png 弱引用 在java中,可以用java.lang.ref.WeakReference实例来保存对一个Java对象弱引用。

    75820

    强引用、软引用、弱引用、虚引用对比

    强引用、软引用、弱引用、虚引用 从Jdk1.2开始,在java.lang.ref包下就提供了三个SoftReference(软引用),PhantomReference(虚引用)WeakReference...因此java语言对对象引用有如下四种: 强引用:就是正常引用。...WeakReference reference = new WeakReference(object); object = null; 虚引用:弱引用一样,会直接被GC清理,而且通过虚引用get方法不会得到对象引用...PhantomReference refernce = new PhantomReference(object); object = null; 1 强引用软引用区别 软引用只有在内存不足时候才会被清理...弱引用虚引用区别就在于被加入队列条件不同,这里主要侧重于考虑对象所属重写了finalize方法,将对象状态归纳为三种:finalizable, finalized、reclaimed,分别代表

    2.2K20

    聊聊Java引用类型(强引用、软引用、弱引用、虚引用),示例WeakHashMap使用【享学Java

    // @since 1.2 public abstract class Reference { // 构造函数是非public 所以只能通包内才能访问此构造函数 Reference...也就是说,一旦SoftReference保存了对一个Java对象软引用后,在垃圾线程对这个Java对象回收前,SoftReference所提供get()方法返回Java对象强引用。... extends Reference { // 仅仅提供了两个构造方法而已,注意它get方法在父Reference上 public WeakReference(T referent...---- 虚引用 虚引用(PhantomReference):虚引用前面的软引用、弱引用不同,它并不影响对象生命周期(java对象生命周期)。...当然我们也可以自定义一个基于WeakReference或者SoftReference缓存结构,有兴趣自定义可以参考这个示例:javaSoftReferenceWeakReference应用于高速缓存示例

    1.3K30

    javareference(一): GC与4种基本Reference(强软弱虚)

    文章目录 1. java对象分配gc简单介绍 2.四种基本Reference 2.1 Strong Reference (强引用) 2.2 Soft Reference 软引用 2.3 Weak...Reference 弱引用 2.4 Phantom Reference 虚引用 1. java对象分配gc简单介绍 在Java中,一切对象都只能通过new进行实例化。...这就是本文需要讨论重点,javaReference。 2.四种基本Reference 为了理解javaReference,那么我们先来看一个例子。...2.2 Soft Reference 软引用 通过java.lang.ref.SoftReference能够创建一个软引用。...2.3 Weak Reference 弱引用 弱引用可以通过java.lang.ref.WeakReference进行实现。弱引用一旦对该对象强引用消失,GC时候就会立即回收。

    65230

    Java 引用类型简述

    Final Reference 当前是否是finalizer,注意这里finalizer是由JVM来标志( 后面简称f ),并不是指java.lang.ref.Finalizer。...但是f是会被JVM注册到java.lang.ref.Finalizer。 ① 当前或父中含有一个参数为空,返回值为void名为finalize方法。...对于软引用关联着对象,如果内存充足,则垃圾回收器不会回收该对象,如果内存不够了,就会回收这些对象内存。在 JDK 1.2 之后,提供了 SoftReference 来实现软引用。...注意:Java 垃圾回收器准备对SoftReference所指向对象进行回收时,调用对象 finalize() 方法之前,SoftReference对象自身会被加入到这个 ReferenceQueue...注意:Java 垃圾回收器准备对WeakReference所指向对象进行回收时,调用对象 finalize() 方法之前,WeakReference对象自身会被加入到这个 ReferenceQueue

    73270

    大数据基础系列之JAVA引用详解

    一,四种引用介绍 从Java SE2开始,就提供了四种类型引用:强引用、软引用、弱引用虚引用。...软引用可以一个引用队列(ReferenceQueue)联合使用,如果软引用所引用对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联引用队列中。...弱引用可以一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联引用队列中。...import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; public class Main { public...; } } 程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用对象是否将要被垃圾回收。

    55470

    JavaReference使用

    Java 2 平台引入了 java.lang.ref 包,这个包下面包含了几个Reference相关Reference相关Java引用也映射成一个对象,这些还提供了与垃圾收集器(garbage...Reference引用几种类型 在jvm中,一个对象如果不再被使用就会被当做垃圾给回收掉,判断一个对象是否是垃圾,通常有两种方法:引用计数法可达性分析法。...关于WeakReferenceJava中一个比较典型应用就是:WeakHashMap。关于这个使用情况大家可以参考这篇文章。...虚引用(PhantomReference) 虚引用前面的软引用、弱引用不同,它并不影响对象生命周期。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。...如果有被回收引用,进行一些操作。 引用队列(ReferenceQueue) 作为一个Java对象,SoftReference对象除了具有保存软引用特殊性之外,也具有Java对象一般性。

    70610

    Java四种引用类型

    简介 从JDK1.2版本开始,把对象引用分为四种级别,从而使程序能更加灵活控制对象生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用虚引用,下面分别介绍下这四种引用。...,可以参考WeakHashMap。...虚引用 虚引用是使用PhantomReference创建,它是所以引用类型中最弱。虚引用对象没有引用对象相同,可以在任何时候被垃圾回收,并且虚引用必须要与引用队列一起使用。...():" + phantomReference.get()); //轮询此队列,查看是否有可用Reference对象,有则返回该对象,否则返回null System.out.println...------ * phantomReference.get():null * referenceQueue.poll():java.lang.ref.PhantomReference@76fb509a

    38830

    Java四种Reference

    首先要大致了解 Java 几种引用类型。如下图所示,JDK 1.2 之后新增了 Reference 概念,给开发人员提供了与 GC 交互一种渠道。...《深入理解 Java 虚拟机》中对于几种引用类型做了简要描述: 强引用(_Strongly Reference_ )是最传统「引用」定义,是指在程序代码中普遍存在引用赋值,即类似 Object...---- PhantomReference PhantomReference 在使用方法上与 SoftReferenceWeakReference 稍有不同,查看它源码: public class...= null; 通过注释能够了解到,它作用是维护一个链表,链表中对象是待入队(放入 queue 中) Reference 对象。...总结一下清理原理: 随着Reference 被加载,Reference-handler 后台线程被启动,它轮循 pending 链表,执行 Cleaner clean 工作。

    30730

    Java强引用,软引用,弱引用,虚引用及其使用场景

    从 JDK1.2 版本开始,Java 把对象引用分为四种级别,从而使程序能更加灵活控制对象生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用虚引用。...sr = new SoftReference(prev); // 重新构建 } 3、弱引用(Weak Reference) 简单来说,就是将对象留在内存能力不是那么强引用。...使用场景: 在下面的代码中,如果类 B 不是虚引用 A 的话,执行 main 方法会出现内存泄漏问题, 因为 B 依然依赖于 A。...虚引用与软引用弱引用一个区别在于:虚引用必须引用队列(ReferenceQueue)联合使用。...一般可以通过虚引用达到回收一些非java一些资源比如堆外内存行为。

    4.7K20

    强引用,软引用,弱引用,幻象引用有什么区别?

    虚引用软引用一个区别是,虚引用必须引用队列(ReferenceQueue)联合使用。... softReference = new SoftReference(str); 软引用可以一个引用队列(ReferenceQueue)联合使用,如果软引用所引用对象被垃圾回收...(); } 代表软引用java.lang.ref.SoftReference 代表弱引用java.lang.ref.WeakReference 代表虚引用java.lang.ref.PhantomReference...他们同时继承了:java.lang.ref.Reference public static void soft() throws Exception { Object obj = new...当然,还有一个最后状态,就是不可达(unreachable),意味着对象可以被清除了。 Java中4种引用级别强度由高到低依次为:强引用 -> 软引用 -> 弱引用 -> 虚引用

    4.3K10

    java 源码系列 - 带你读懂 Reference ReferenceQueue

    https://blog.csdn.net/gdutxiaoxu/article/details/80738581 java 源码系列 - 带你读懂 Reference ReferenceQueue...我们都知道在Java中有4种引用,这四种引用从高到低分别为: 1) StrongReference 这个引用在Java中没有相应与之对应,但是强引用比较普遍,例如:Object obj = new...这也就说明了当内存充足时候一个对象只有软引用也不会被JVM回收。 3) WeakReference WeakReference 基本与SoftReference 类似,只是回收策略不同。...注意:PhantomReference必须要和ReferenceQueue联合使用,SoftReferenceWeakReference可以选择ReferenceQueue联合使用也可以不选择,这使他们区别之一...---- 总结 Refrence 引用队列 ReferenceQueue 联合使用时,如果 Refrence持有的对象被垃圾回收,Java 虚拟机就会把这个弱引用加入到与之关联引用队列中。

    66410
    领券