`
isiqi
  • 浏览: 16334507 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

什么是Java的弱引用(Weak Reference)

阅读更多
之前一直没有接触过弱引用这个概念,今天看到以后觉得挺新鲜,就查了查资料总结一下,希望对大家有所帮助。
要理解弱引用,首先要先了解一下强引用(Strong Reference), 其实我之前也并不了解强引用,虽然天天都在用。举例来说:
  1. Stringabc=newString("abcdf");
这就是创建了一个String的实例然后在变量abc中保存一个强引用,为什么说它强(Strong)呢?这是跟垃圾回收器相关的,如果一个对象是通过强引用链(Chain of Strong Reference) 访问到的,也就是像上面那样,那么这个对象是不会被垃圾回收器回收的, 这在正常情况下是正确的,因为你不想垃圾回收器回收你正在使用的对象。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemory错误,是程序异常终止,也不会为了解决内存不足而回收这类引用的对象。这就是使用强引用的一个问题, 强引用的另外一个常见的问题就是缓存, 特别是对于那些非常大的数据结构,像图片等等,平差情况下我们是希望程序能缓存这些大的数据结构的,因为重新加载非常耗费服务器资源。因为缓存就是为了避免重新加载这些大的数据结构的,所以缓存中会保存一个指向内存中数据结构的引用,而这些引用通常都是强引用,所以这些引用会强迫这些大的数据结构保存在内存中,除非用通过某些方法户知道哪一个数据结构不再需要保存在内存中了,然后再把他从缓存中清除。

弱引用就是不保证不被垃圾回收器回收的对象,它拥有比较短暂的生命周期,在垃圾回收器扫描它所管辖的内存区域过程中,一旦发现了只具有弱引用的对象,就会回收它的内存,不过一般情况下,垃圾回收器的线程优先级很低,也就不会很快发现那些只有弱引用的对象。

弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用的对象被垃圾回收的话,Java虚拟机就会把这个弱引用加入相关的引用队列中。
一下就是创建弱引用对象的例子。
  1. Stringabc=newString("abcde");
  2. WeakReference<String>wf=newWeakReference<String>(str,rq);

String abc1 = wf.get()//如果abcde这个对象没有被垃圾回收器回收,那么abc1就指向"abcde"对象



分享到:
评论

相关推荐

    Java功底之Reference

    2. **弱引用(Weak Reference)**:弱引用比软引用更弱,一旦发现一个对象只有弱引用,无论内存是否充足,垃圾收集器都会在下次GC时回收该对象。这使得弱引用非常适合用于构建不阻塞垃圾收集的关联数据结构。 3. **...

    理解Java中的弱引用(Weak Reference)

    本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:)  1....

    Java中弱引用软引用虚引用及强引用的区别Java开发Ja

    3. **弱引用(Weak Reference)**: - 弱引用比软引用更弱,只要垃圾收集器运行,无论内存是否充足,都会回收弱引用指向的对象。弱引用常用于实现内存敏感的缓存。 - 示例:`WeakReference&lt;String&gt; weakRef = new ...

    java 常见的四种引用

    弱引用 (Weak Reference) 弱引用是另一种允许被垃圾回收的引用类型,但与软引用相比,弱引用持有的对象生命周期更短。只要垃圾回收器线程扫描到被弱引用持有的对象,无论当前内存空间是否足够,都会回收这些对象。 ...

    Java中的软引用弱引用和虚引用.docx

    本文将深入探讨Java中三种特殊的引用类型——软引用(Soft Reference)、弱引用(Weak Reference)以及虚引用(Phantom Reference),并分析它们如何帮助我们更好地管理内存资源。 #### 二、基础知识回顾 在深入了解这三...

    Java中的强软弱虚引用

    为了更好地理解和控制对象的生命周期,Java提供了四种不同类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)以及虚引用(Phantom Reference)。每种引用都有其特定的...

    十分钟理解Java中的弱引用编程开发技术共3页.pdf.z

    在Java中,`java.lang.ref`包提供了三种不同类型的引用:强引用(Strong Reference)、软引用(Soft Reference)和弱引用(Weak Reference)。我们主要关注弱引用,它通过`WeakReference`类来实现。弱引用对象在创建...

    Java 7之基础 - 强引用、弱引用、软引用、虚引用1

    2. **弱引用(Weak Reference)** - **定义**:弱引用不会阻止对象被垃圾收集。一旦所有强引用消失,即使有弱引用指向,对象也会被回收。 - **例子**:`WeakReference&lt;Object&gt; weakRef = new WeakReference(new ...

    Android中的软引用和弱引用

    在这个过程中,软引用(Soft Reference)和弱引用(Weak Reference)是两种非常重要的工具,它们可以帮助我们避免内存泄漏,提高应用的内存效率。下面我们将深入探讨这两种引用类型及其在Android中的应用。 首先,...

    Java的四种引用

    从JDK 1.2版本开始,Java引入了一种更为精细的引用类型管理机制,通过四种不同的引用类型:强引用、软引用、弱引用和虚引用,让开发者能够更加灵活地控制对象的生命周期。这种机制不仅提升了Java应用程序对内存使用...

    Java引用类型1

    3. **弱引用(Weak Reference)** - 弱引用不会阻止对象被垃圾收集,只要对象变为弱可达,垃圾收集器就会回收它。弱引用常用于避免内存泄漏,例如缓存图片。创建弱引用: ```java WeakReference&lt;Widget&gt; ...

    java引用的demo

    本示例“java引用的demo”将深入探讨四种不同类型的引用:强引用、软引用、弱引用和虚引用。这些引用类型对于理解和优化内存管理至关重要,特别是在Android开发中,因为良好的内存管理能够提升应用性能并防止内存...

    强引用、软引用、弱引用、虚引用1

    3. 弱引用(Weak Reference) 弱引用比软引用的生存期更短。一旦创建了弱引用,那么无论系统内存是否充足,只要进行垃圾回收,就会回收弱引用指向的对象。弱引用通常用于避免内存泄漏,特别是在那些对象不再需要,...

    java 引用相关文档

    3. **弱引用(Weak Reference)** - 弱引用比软引用更弱,无论内存是否充足,只要垃圾收集器工作,就会回收弱引用所指向的对象。这使得弱引用常用于实现内存敏感的数据结构,如`WeakHashMap`。 - 示例:`...

    强应用软引用弱引用与垃圾收集的关系1

    3. **弱引用(Weak Reference)**: - 弱引用比软引用更弱,它不会阻止对象被垃圾收集。通过`java.lang.ref.WeakReference`类创建。只要发现对象只有弱引用,JVM就会在下一次GC时回收该对象。弱引用适用于那些...

    Java学习之Reference、Eclipse调优、jvisualvm使用

    通常,Java有四种类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。强引用是最常见的类型,当对象被强引用持有时,垃圾回收器不会回收...

    详解Java弱引用(WeakReference)的理解与使用

    弱引用和强引用(StrongReference)的区别在于:当一个对象仅仅被弱引用指向,而没有任何其他强引用指向时,如果 GC 运行,那么该对象就会被回收。弱引用的语法是:`WeakReference&lt;Car&gt; weakCar = new WeakReference...

    referenceInJava:Java强引用,软引用,弱引用以及虚引用测试项目

    3. **弱引用(Weak Reference)**: - 弱引用比软引用更弱,它们不会阻止垃圾收集器回收对象。只要弱引用存在,对象就可访问,但一旦弱引用被垃圾收集器扫描到,无论内存是否充足,都会立即回收该对象。弱引用由`...

    Java引用类型编程开发技术共13页.pdf.zip

    7. 弱引用(Weak Reference):弱引用对象的存在不会阻止垃圾收集器的回收。一旦没有任何强引用或软引用指向对象,即使是弱引用,该对象也会被立即回收。 8. 虚引用(Phantom Reference):虚引用并不直接与对象相...

Global site tag (gtag.js) - Google Analytics