• Java 引用


    Java 对象的引用方式有如下四种,这四种方式主要是为了给垃圾回收提供更灵活的操作:

    1、强引用,最常见的引用方式,当一个对象被一个或一个以上的引用变量引用时,它处于可达状态,这时不会被垃圾回收器回收。

    2、软引用(SoftReference),通常用于内存敏感的程序中,当一个对象只有软引用时,当系统空间足够时,系统不会回收它,当系统空间不够时,系统可能回收它。

    3、弱引用(WeakReference),不管系统空间是否足够,总会回收该对像所占用的内存。

    4、虚引用(PhangtomReference),类似与完全没有引用,虚引用主要用于跟踪对象被垃圾回收的状态,它不能单独使用,必须和引用队列(ReferenceQueue)一起使用,当该引用的对象被垃圾回收之后,虚引用将进入引用队列中,虚引用不能通过get方法,获取正常的引用。

    示例如下:

    import java.lang.ref.PhantomReference;
    import java.lang.ref.ReferenceQueue;
    
    public class PhantomReferenceTest {
    
        public static void main(String[] args) {
            String str = new String("Hello World");
            ReferenceQueue referenceQueue = new ReferenceQueue<>();
            
            PhantomReference<String> phantomReference = new PhantomReference<String>(str, referenceQueue);
            
            str = null;
            
            System.out.println(phantomReference.get());
            
            System.gc();
            System.runFinalization();
            
            System.out.println(referenceQueue.poll() == phantomReference);
        }
    
    }

    运行结果:

    null
    true

    虚引用不能通过虚引用访问被引用的对象,但是当垃圾回收后,虚引用进入了ReferenceQueue。

  • 相关阅读:
    如何紧急恢复SQL Server主数据库
    合理利用SQL Server查询执行计划
    理解RAID的四种级别
    sp_spaceused 显示行数、保留的磁盘空间以及当前数据库中的表、索引视图
    修复数据库索引问题:理解填充因数设置
    SQL Server调整因子
    sqlservr 命令行启动
    DBA需要考虑备份相关问题
    BCP
    “tablediff ”命令行工具
  • 原文地址:https://www.cnblogs.com/zj2012zy/p/5327496.html
Copyright © 2020-2023  润新知