`

java四种引用

 
阅读更多

1、强引用:诸如Object a = new Object();如果在一个方法体内,只要方法没结束,这个对象就不会被回收。

2、软引用:在将要抛出Out of memory之前首先会回收已经无引用、不可达的对象。

3、弱引用:在GC时,就会回收已经无引用、不可达的对象。

4、虚引用:任何时候可能被回收,好像一般用来跟踪对象回收之类的,用的少。

需要注意的是,后面三种引用类都继承了Reference虚拟类,该类与成员变量ReferenceQueue一起实现回收与监听作用。其中,staic方法会开启一个所有公用的线程,监控处理改变可达状态的对象(Active、Pending、Enqueued、Inactive),不可达时回收内存,并且如果queue不为null,会把Reference子类自己放进去。

 

其中,软引用可用高速缓存,而弱引用用的较多,比如WeakHashMap,

个人理解:WeakHashMap该集合类的内部结构与HashMap相似(Node<K,V>[] table),但这里Entry继承了弱引用类,并将key作为弱引用对象,调用父类构造方法传到Reference中。监听到key内存被回收后,继承了Reference的Entry就被放入了queue中,在WeakHashMap调用celar、put、size等方法时,就会检测queue中的无效的Entry并清除(这时候才真正回收value的内存)。

 

 

 /**
     * The table, resized as necessary. Length MUST Always be a power of two.
     */
    Entry<K,V>[] table;

    /**
     * Reference queue for cleared WeakEntries
     */

    private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
    private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> {
        V value;
        final int hash;
        Entry<K,V> next;

        /**
         * Creates new entry.
         */
        Entry(Object key, V value,
              ReferenceQueue<Object> queue,
              int hash, Entry<K,V> next) {
            super(key, queue);
            this.value = value;
            this.hash  = hash;
            this.next  = next;
        }

 

 

分享到:
评论

相关推荐

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

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

    Java中四种引用类型详细介绍

    自JDK 1.2以来,Java引入了四种不同的引用级别,以提供更精细的控制权。以下是这四种引用类型的详细解释: 1. **强引用(StrongReference)** - 强引用是最常见的引用类型,例如`A a = new A()`。只要一个对象被强...

    浅谈Java中的四种引用方式的区别

    Java提供了四种不同类型的引用,每种引用都有其特定的用途和行为。本文将深入探讨这四种引用——强引用、软引用、弱引用和虚引用,以及它们在内存管理和垃圾回收中的作用。 1. **强引用(StrongReference)** - 强...

    java 常见的四种引用

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

    java四种引用及在LeakCanery中应用详解

    Java中的四种引用类型是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference),它们各自有着不同的特点和用途,主要用于内存管理和防止内存泄漏。 1. 强引用...

    Java的四种引用

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

    JAVA核心知识点整理.pdf

    ### Java四种引用类型 Java的引用类型分为强引用、软引用、弱引用和虚引用。 - **强引用**:就是普通的引用关系,当垃圾回收器工作时,若对象还有强引用指向,则不会被回收。 - **软引用**:当内存不足时,软引用...

    JAVA核心知识整理.pdf

    #### Java四种引用类型 - **强引用**:最常见的引用类型,只要强引用存在,则垃圾回收器永远不会回收该对象。 - **软引用**:可用于实现内存敏感的缓存机制。当内存不足时,可以被垃圾回收器回收。 - **弱引用**:...

    Java中对象与引用

    ### Java中对象与引用 在Java编程中,深入理解对象与引用的概念对于掌握面向对象编程至关重要。本文将从以下几个方面详细解析对象与引用的基本概念及其相互间的关系。 #### 一、对象与引用的基础概念 **对象**: ...

    java面试全解.pdf

    - **JAVA四种引用类型**: - **强引用**:最常用的引用类型,如`Object obj = new Object()`。 - **软引用**:当系统将要发生内存溢出异常前,会被系统回收。 - **弱引用**:在下一次垃圾回收时被回收。 - **虚...

    JAVA架构师知识整理.pdf

    **1.4 JAVA四种引用类型** Java中定义了四种引用类型,它们分别是强引用、软引用、弱引用和虚引用。 - **1.4.1 强引用** - 最常用的引用类型,如`Object obj = new Object()`。只要强引用存在,垃圾回收器就不会...

    Java中的引用类型详解:强引用、软引用、弱引用与虚引用

    从JDK 1.2版本开始,Java引入了四种不同级别的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。这些引用类型提供了灵活的内存管理策略,允许...

    阿里P8 架构师整理Java学习笔记.pdf

    **1.5 JAVA四种引用类型** - **强引用**: 最常用的引用类型,如Object obj = new Object()。 - **软引用**: 用于描述还有用但非必须的对象。只有在内存不足时,才会被回收。 - **弱引用**: 更容易被回收,用于描述...

    Java设计模式.pdf

    Java四种引用类型包括强引用、软引用、弱引用和虚引用。它们决定了对象的生命周期及其被垃圾回收的时机。 GC(垃圾回收)算法包括分代收集和分区收集策略。分代收集主要应用于新生代和老年代的垃圾回收,分区收集则...

    详解Java的四种引用方式及其区别

    Java中的四种引用方式包括强引用、软引用、弱引用和虚引用,这四种引用方式是Java内存管理机制的重要组成部分。了解这些引用方式的特点和使用场景,对于Java程序的开发和优化至关重要。 强引用(StrongReference) ...

    Java的引用和函数参数传递

    ### Java的引用与函数参数传递详解 #### 一、Java中的引用基础 在Java中,对象的引用扮演着类似于其他编程语言(如C/C++)中指针的角色,但是Java的引用比传统的指针更加安全且易于管理。这是因为Java的设计者们...

    JAVA知识点.pdf

    - **JAVA四种引用类型** - **强引用**:最常见的引用类型,如`Object obj = new Object()`。 - **软引用**:可用于实现内存敏感的缓存,当内存不足时会被回收。 - **弱引用**:更弱一些的引用类型,在下一次垃圾...

    Java中的强软弱虚引用

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

Global site tag (gtag.js) - Google Analytics