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 手动实现置空

  • 相关阅读:
    DirectX9:基础篇 第六章 颜色
    DirectX9:应用篇 论OBJ模型文件格式
    MFC:绘图基础
    DirectX9:基础篇 纹理
    DirectX9:应用篇 论OBJ模型文件和.X模型文件互转
    MFC:控件位置调整
    数据结构:二叉树
    DirectX9:总结篇 数据类型结构
    C89:论结构体/枚举体/联合体的使用
    css布局汇总
  • 原文地址:https://www.cnblogs.com/toUpdating/p/9088424.html
Copyright © 2011-2022 走看看