定义

WeakReference是弱引用,该引用不会影响垃圾回收器对对象的回收,不会影响对象的生命周期。

说明

当虚拟机在某个时间点决定要回收一个弱可达(weakly-reachable)对象时,会自动清除该对象的所有弱引用。并且会将对象变为finalizable状态,然后把这些刚清除的弱引用放到其注册的引用队列中。

[前面已经说明过WeakReference的用法了,本篇仅对WeakReference从源码角度做一些补充。

源码

public class WeakReference<T> extends Reference<T> {
public WeakReference(T referent) {
super(referent);
} public WeakReference(T referent, ReferenceQueue<? super T> q) {
super(referent, q);
} }

嗯,十行代码,可以说是很简单的一个类了,只有两个构造函数,一个传引用队列,另一个不传,没有覆盖父类Reference的任何方法。

WeakHashMap

说到WeakReference,自然不能不说WeakHashMap,这个map的用法与hashmap基本一致,它的特点便是使用弱引用作为key,这就让它有一个很重要的特性,它可以自动清除自身,这样就不需要再像之前SoftReference那样需要手动去释放引用实例。

关于WeakHashMap会在另一篇中有详细的介绍,这里就不多说了。

好像。。。没什么可讲的了。在前面弱引用一篇里基本都讲完了。

你不可不知的Java引用类型之——WeakReference源码详解的更多相关文章

  1. 你不可不知的Java引用类型之——ReferenceQueue源码详解

    定义 ReferenceQueue是引用队列,用于存放待回收的引用对象. 说明 对于软引用.弱引用和虚引用,如果我们希望当一个对象被垃圾回收器回收时能得到通知,进行额外的处理,这时候就需要使用到引用队 ...

  2. 你不可不知的Java引用类型之——PhantomReference源码详解

    定义 PhantomReference是虚引用,该引用不会影响不会影响对象的生命周期,也无法从虚引用中获取对象实例. 说明 源码介绍部分其实也没多大内容,主要内容都在前面介绍中说完了.PhantomR ...

  3. 你不可不知的Java引用类型之——SoftReference源码详解

    定义 SoftReference是软引用,其引用的对象在内存不足的时候会被回收.只有软引用指向的对象称为软可达(softly-reachable)对象. 说明 垃圾回收器会在内存不足,经过一次垃圾回收 ...

  4. 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解

    数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...

  5. 你不可不知的Java引用类型之——Reference源码解析

    定义 Reference是所有引用类型的父类,定义了引用的公共行为和操作. reference指代引用对象本身,referent指代reference引用的对象,下文介绍会以reference,ref ...

  6. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  7. Java集合【6.1】-- Collection接口源码详解

    目录 一.Collection接口简介 二.Collection源码分析 三.Collection的子类以及子类的实现 3.1 List extend Collection 3.2 Set exten ...

  8. Java多线程学习之线程池源码详解

    0.使用线程池的必要性 在生产环境中,如果为每个任务分配一个线程,会造成许多问题: 线程生命周期的开销非常高.线程的创建和销毁都要付出代价.比如,线程的创建需要时间,延迟处理请求.如果请求的到达率非常 ...

  9. Java集合——TreeMap源码详解

    )TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.因为红黑树是平衡的二叉搜索树,所以其put(包含update操作).get.remove的时间复杂度都为log(n). (2 ...

随机推荐

  1. 树莓派配置wifi链接

    使用树莓派链接网络是必然的,这里讲一讲如何连接到wifi. 扫描WIFI sudo iwlist wlan0 scan 扫描后得到以下结果 这里的“ESSID”是无线网的名称. 添加有密码的WIFI网 ...

  2. 使用 Infer.NET 进行概率编程

    本文介绍了如何使用 Infer.NET 进行概率性编程. 概率性编程是一种将自定义模型表示为计算机程序的机器学习方法. 借助它可以在模型中包含专业知识,使机器学习系统更易理解. 它还支持在线推断,即在 ...

  3. redis简单应用

    启动和结束 --启动redis服务 E:\redis>redis-server.exe redis.windows.conf --结束redis服务 127.0.0.1:6379> shu ...

  4. Apache-Flink深度解析-DataStream-Connectors之Kafka

    Kafka 简介 Apache Kafka是一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,LinkedIn于2010年贡献给了Apache基金会并成为顶级开源项目.Kafka用 ...

  5. mongo-spark-读取不同的库数据和写入不同的库中

    mongo-spark-读取不同的库数据和写入不同的库中 package com.example.app import com.mongodb.spark.config.{ReadConfig, Wr ...

  6. win32线程

    win32线程 一丶什么是线程 在windows中常听到的就是线程.多线程.啊什么的. 这里介绍一下什么是线程. 1.线程是附属在进程中的一个执行实体.简而言之就是执行代码的. 2.每个进程至少有一个 ...

  7. linux:终端常用命令 + vi命令修改文件及保存 方法

    首先介绍一下Ubuntu下各个目录的一般作用: /  这就是根目录,一台电脑有且只有一个根目录,所有的文件都是从这里开始的.举个例子:当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录 ...

  8. OpenResty api网关设计

    本文讲述 OpenResty api网关设计,主要涉及api网关介绍.openresty api网关 请求路由(路由判断.路由重写.服务判断.限流).授权验证(统一认证).动态Upstream 以及这 ...

  9. 再也不用被this苦恼了

    前端编程对于this再熟悉不过了,今日来个老调重弹温故知新,肯定有很多大佬已经完全吃透了this原理,敬请出门左拐.对于理解this似懂非懂的同学可以借鉴一波 1.this描述 this指的是当前执行 ...

  10. hadoop框架详解

    Hadoop框架详解 Hadoop项目主要包括以下四个模块 ◆ Hadoop Common: 为其他Hadoop模块提供基础设施 ◆ Hadoop HDFS: 一个高可靠.高吞吐量的分布式文件系统 ◆ ...