zoukankan      html  css  js  c++  java
  • 各种引用

    Java 中除了强引用之外,还提供了其它低级别的引用

    对象可达状态:

          如果一个对象的引用权重为a,指向这个对象的所有指针链中任意一条指针链的权重不小于a,则称这个对象a可达

                    强可达:必然有一条是强引用

          软可达:通过软引用实现,不保证gc回收时置空,jvm保证 OutOfMemery之前回收

          弱可达:通过弱引用实现,gc下次时置空弱引用,回收

          虚可达:无法通过get()方法获取到引用的对象,gc不负责引用置空,需手动实现

              特殊:如果对象中实现了finalize()方法,jvm会为该对象创建FinalReference引用,一般用于保底操作(回收资源等),建议手动提前回收资源。

           当gc扫描时,发现相应的引用时,把引用放入链表中

        ①jvm把引用放到discovered或者pending

    ② 判断对象无强引用时,如果判断该对象需要回收,把相应引用置空,对象成不可达状态,

    把discoved中引用放入pending链表中

    ③ Reference中线程Reference Handler处理pending链表,

      3.1 如果是Cleaner(PhantomReference子类),直接调用clean()方法

      3.2 把引用放入到自己的ReferenceQueue中。

    4  不同级别的引用对自己的队列做不同处理

       4.1  Finalizer(FinalReference) 调用Finalizer()方法,并且调用super.clear()置空引用

      4.2 SoftReference 手动实现置空

      4.3 weakReference 手动实现置空

  • 相关阅读:
    mormot json操作
    DELPHI优秀的一些开源框架:QDAC,MORMOT,DIOCP
    数据库中间件支持数据库集群方案
    idhttp的用法
    firedac odbc sql server driver连接占线导致另一个hstmt
    论DATASNAP远程方法支持自定义对象作参数
    咏南中间件
    JS--截取字符串常用方法详细
    使用JavaScript进行进制转换将字符串转换为十进制
    Mac--安装kubernetes并运行echoserver
  • 原文地址:https://www.cnblogs.com/toUpdating/p/9088424.html
Copyright © 2011-2022 走看看