`
jv520jv
  • 浏览: 2629 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java 强引用 软引用 弱引用 虚引用 的个人理解!

阅读更多

前些时间自己在用WeakHashMap时对这个弱引用有些不太清楚,后来查了一些资料总算弄清楚了,下面是我的一个测试代码
public class ReferenceTest {
	public static void main(String[] args) {
		ReferenceQueue<String> rq=new ReferenceQueue<String>();//引用队列
		//强引用:只要引用存在,其对象就不会被垃圾回收
		String str=new String("str--StrongReference");
		//软引用:在垃圾回收时,发现内存不够时才会回收
		SoftReference<String> sr=new SoftReference<String>("str--SoftReference");
		//弱引用:在垃圾回收时,直接回收
		WeakReference<String> wr=new WeakReference<String>("str--WeakReference");
		//虚引用:对对象的生命周期完全不相关,只是当它指向的对象被回收时,虚引用会被加入到rq中.
		PhantomReference<String> pr =new PhantomReference<String>("str--PhantomReference",rq);
		System.out.println("-----------------before gc------------------");
		System.out.println(str);
		System.out.println(sr.get());
		System.out.println(wr.get());
		System.out.println(pr.get());
		Reference<? extends String> r=null;
		while((r=rq.poll())!=null){
			System.out.println("ReferenceQueue:"+" ref:"+r.toString()+" value:"+r.get());
		}
		System.gc();
		System.out.println("-----------------after gc------------------");
		System.out.println(str);
		System.out.println(sr.get());
		System.out.println(wr.get());
		System.out.println(pr.get());
		while((r=rq.poll())!=null){
			System.out.println("ReferenceQueue:"+" ref:"+r.toString()+" value:"+r.get());
		}
	}
}
下面是在我机器上运行的结果
-----------------before gc------------------
str--StrongReference
str--SoftReference
str--WeakReference
null
-----------------after gc------------------
str--StrongReference
str--SoftReference
null
null
ReferenceQueue: ref:java.lang.ref.PhantomReference@c17164 value:null
注意:ReferenceQueue: ref:java.lang.ref.PhantomReference@c17164 value:null 这一句打印出来,说明虚引用所指向的对象已经被垃圾回收器销毁了.  
分享到:
评论

相关推荐

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

    强引用、弱引用、软引用和虚引用是四种不同的引用强度,它们在垃圾回收机制中扮演着不同的角色。了解这些引用类型对于优化内存使用、防止内存泄漏以及合理地控制对象生命周期至关重要。 1. **强引用(Strong ...

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

    从Java SE2开始,Java引入了四种不同类型的引用:强引用、软引用、弱引用和虚引用,它们各自具有不同的特点和用途,有助于程序员更精细地控制对象的生命周期,并优化垃圾回收过程。 1. 强引用(Strong Reference) ...

    Java中的强软弱虚引用

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

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

    这个"referenceInJava"项目专注于探讨四种不同类型的引用:强引用、软引用、弱引用和虚引用。这些引用类型与垃圾收集(Garbage Collection, GC)机制密切相关,对于优化内存使用和防止内存泄漏至关重要。 1. **强...

    Java中弱引用和软引用的区别以及虚引用和强引用介绍

    强引用、弱引用、软引用和虚引用这四种引用类型提供了不同的对象生命周期管理策略。下面将详细介绍这些引用的区别及其应用场景。 1. **强引用(Strong Reference)** - 强引用是最常见的引用类型,如普通变量引用。...

    拓胜技术专家教你如何深入理解Java四种引用类型

    Java中的四种引用类型是Java内存管理的重要组成部分,它们分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。每种引用类型具有不同的特点和用途,...

    java 常见的四种引用

    在Java中,为了更好地管理对象的生命周期,从JDK 1.2开始引入了四种不同级别的引用类型:强引用、软引用、弱引用和虚引用。每种引用类型都有其特定的应用场景,通过灵活运用这些引用类型,开发者可以在内存管理和...

    强,软,弱,虚1

    本文将深入探讨四种引用类型:强引用、软引用、弱引用和虚引用。 首先,我们来理解强引用(Strong Reference)。强引用是最常见的引用类型,它代表了程序中的普通对象引用。当一个对象被强引用指向时,该对象被认为...

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

    本文将深入探讨强引用、软引用、弱引用以及幻象引用这四种引用类型,以及它们与垃圾收集的关系。 1. **强引用(Strong Reference)**: - 强引用是Java中最常见的引用类型,它代表了一个对象的直接访问路径。只要...

    Java的四种引用

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

    10分钟带你理解Java中的弱引用

    Java中存在四种引用级别:强引用、软引用、弱引用和虚引用,弱引用位于这些级别中间,比软引用弱,比虚引用强。 1. 强引用(Strong Reference):最常见的引用类型,通过`new`关键字创建的对象引用即为强引用。只要...

    Java引用类型1

    Java提供了四种不同级别的引用类型:强引用、软引用、弱引用和虚引用(幻象引用),每种引用类型在内存管理中有不同的作用。 1. **强引用(Strong Reference)** - 强引用是最常见的引用类型,即通常的变量赋值。...

    java引用的demo

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

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

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

    android安卓图片的三级缓存DEMO 三层缓存示例下载 强引用 软引用

    这里的“强引用”指的是Java中的强引用,即常规的对象引用,只要还有强引用指向对象,垃圾回收器就不会回收它。然而,内存缓存的缺点是当系统内存不足时,可能会被系统回收。 2. **磁盘缓存(软引用)**:当内存...

    使用Java强引用和垃圾回收实现一个简单的缓存系统.txt

    ### 使用Java强引用和垃圾回收实现一个简单的缓存系统 #### 概述 本文将详细介绍一个基于Java语言的简单缓存系统实现方案。该系统利用Java中的强引用以及垃圾回收机制来管理缓存数据,确保内存的有效利用。通过...

    详解JAVA 虚引用

    如果一个对象没有强引用和软引用,对于垃圾回收器而言便是可以被清除的,在清除之前,会调用其finalize方法,如果一个对象已经被调用过finalize方法但是还没有被释放,它就变成了一个虚可达对象。 与软引用和弱引用...

    java 引用相关文档

    在这里,我们将详细讲解Java中的四种引用类型:强引用、软引用、弱引用和虚引用,以及它们在内存管理和垃圾收集中的作用。 1. **强引用(Strong Reference)** - 强引用是Java中最常见的引用类型,它是默认的引用...

    Java 引用1

    在Java编程语言中,对象的引用机制是一个关键的概念,特别是从JDK 1.2版本开始引入的四种不同级别的引用:强引用、软引用、弱引用和虚引用。这些引用类型为开发者提供了更为精细的控制,帮助优化内存管理,尤其是在...

    如何解决Java的循环引用问题

    即使有弱引用指向一个对象,只要这个对象没有其他强引用,垃圾回收器就会在下一次回收时将其回收。修改上述示例代码,使用弱引用可以避免循环引用: ```java public class A { public WeakReference&lt;B&gt; bRef; } ...

Global site tag (gtag.js) - Google Analytics