java中的弱引用(WeakReference)

前言:   再高的山峰也有跨过的时候,再遥远的路,终有一天也会抵达终点 ----- 送给正在拼搏的所有人

何为弱引用

我们知道java中一切皆对象,而这个对象可以称之为引用,它指向了堆内存的一块地址,在说弱引用之前,先说一下强引用:强引用就是我们平时new出来的普通对象,比如Person p = new Person(),p对象一般来说可以称之为强引用,强引用有什么特点呢?

  • 指向了堆内存的一块地址
  • 如果GC ROOT根可达,且引用链皆为强引用,则不会被垃圾回收

这些概念相信大家都耳熟能详,下面再介绍弱引用
所谓弱引用,是用来描述那些非必须的对象,被弱引用关联的对象(此对象只被弱引用,没有被强引用)只能生存到下一次垃圾收集发生为止,不管当前内存是否充足,都会回收掉只被弱引用关联的对象,在jdk1.2之后提供了WeakReference类来实现弱引用。

那么我们可以总结一下它的特点

  • 指向了堆内存的一块地址
  • 如果只被弱引用关联,则下次垃圾回收一定会回收此对象
具体示例
package com.chuquwan.mbean;

import java.lang.ref.WeakReference;

public class WeakTest {

    public static void main(String[] args) {
   		// 1.创建person对象,此引用类型为强引用
        Person person = new Person(); 
        // 2.创建弱引用对象,表示初始化一个person的弱引用
        WeakReference<Person> weakReference = new WeakReference<>(person); 
        // 3.查看此弱引用对象还是否存在
        System.out.println(weakReference.get()); 
        // 4.将强引用赋值为null,此时person只存在了一个弱引用
        person = null; 
        // 5.提醒jvm开始垃圾收集
        System.gc(); 
        // 6.再此检查垃圾收集后的弱引用是否还存在,此时应该已经为null了
        System.out.println(weakReference.get()); 
    }
}
class Person {}

输出结果

com.chuquwan.mbean.Person@330bedb4
null
弱引用有啥用

前面说了一大堆,总结出了若干个问题,其中包括

  • 什么对象是非必须的?
  • 弱引用的作用是什么?
  • 能不能举个具体的应用场景?

什么对象是非必须的?

这个很难回答,需求不同,答案就不同。一般来说,我认为是一次性的使用对象,当他使用完毕之后,他就毫无用处了,此对象可以称之为非必须的

弱引用的作用

是用来管理并回收这些非必须的对象

具体应用场景

WeakReference在ThreadLocal类中有具体应用,我们下次会在ThreadLocal的内存泄露问题进行讨论

部分参考自: 《深入理解Java虚拟机》

本人才疏学浅,如有错误,还请指正,如需转载,还请注明出处 :)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值