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

  • 相关阅读:
    亨元模式
    模板方法模式
    组合模式
    命令模式
    Android AIDL使用介绍(2)自定义数据类型的传递*
    Android主线程(ActivityThread)源代码分析
    一个简单的死锁代码*
    ABA问题的本质及其解决办法*
    Java 多线程Atomic 与CAS 原理剖析*
    Java并发编程:volatile关键字解析*
  • 原文地址:https://www.cnblogs.com/toUpdating/p/9088424.html
Copyright © 2011-2022 走看看