• Java中的四种引用类型(精简)


    话不多说奔主题,精神抖擞就是干!

    1. 在JDK1.2之后引入了强、软、弱、虚引用这四个概念。

    2. 强引用

    Object obj = new Object();

    这个obj就是"="式后面那个对象的强引用,也是我们常用的引用。

    *要点:在任何时候都不会被JVM GC回收掉,在JVM内存溢出后直接OOM。

    3. 软引用

    用途:对于可能会被经常访问到的数据采用软引用,提高查询效率,但是如果不需要的时候又需要GC主动去回收掉。

    Object obj = new Object();

    SoftRefence<Object> sr = new SoftRefence<>(obj);

    obj = null;

    obj = sr.get();  //返回这个对象的强引用,但有时候会返回Null

    *要点:在JVM内存快要溢出时GC回收掉。

    4. 弱引用

    相较软引用保存时间更短

    Object obj = new Object();

    WeakReference<Object> wr = new WeakReference<>(obj);

    obj = null;

    obj = wr.get();  //返回这个对象的强引用,但有时候会返回Null

    boolen eq = wr.isEnQueued();  //返回是否即将被GC回收器回收的标记

    *要点:在JVM第二次GC时回收掉。

    5. 虚引用

    Object obj = new Object();

    PhantomReference<Object> pr = new PhantomReference<>(obj);

    obj = null;

    obj = pr.get();  //永远返回Null

    boolen eq = pr.isEnQueued();  //返回是否被GC回收器回收的标记

    6. 结合引用队列使用

    软、弱、虚引用都可以结合引用队列使用,下面以软引用为例:

    Object obj = new Object();

    ReferenceQueue<Object> queue = new ReferenceQueue<>();

    SoftReference sr = new SoftReference(object, queue);  //绑定对象和引用队列

    obj = null;

    SoftReference val = null;

    while ((val = queue.poll()) != null) {

      //处理逻辑

    }

    *要点:

      强引用    对象       弱引用

    sr  --->  new SoftReference  --->  obj

    当软引用所引用的对象被GC回收掉以后,那么软引用对象本身会被加入到与它绑定引用队列中去。

    我们知道,当你引用的对象被GC回收掉以后,那你new SoftReference出来的(引用)对象本身是不是已经没有存在的价值了,

    但是它仍被你的sr强引用着,无法被GC回收掉,这个时候需要我们的程序添加处理逻辑。

    如果有学过C++的同学可能会好理解一些,他就像是指向指针的指针,在这里就是引用引用的引用。你品,你细品~

    欢迎看官儿们留言补充和指正,谢谢下次见!

  • 相关阅读:
    关于数据库字符集编码及通用软件产品的设计表结构的注意事项
    记一次调用第三方接口,对方获取到参数乱码问题
    Java获取固定格式日期&计算日期相差时长
    Redis之雪崩、穿透、击穿
    [LeetCode] 两数相加 (JavaScript 解法)
    React hooks 获取 dom 引用
    PHP + Redis 实现定任务触发
    测试PHP几种方法写入文件的效率与安全性
    如何调整firefox鼠标滚轮速度
    美美Apple ID 注册教程
  • 原文地址:https://www.cnblogs.com/chenyixun/p/13162286.html
Copyright © 2020-2023  润新知