zoukankan      html  css  js  c++  java
  • 对象是否存在的判定方法

    • 混淆点 : 引用计数的算法难以解决对象之间的相互循环引用.所以, JAVA 和 C# 都是用根据搜索算法来判断对象是否存活的.
    • 算法思路 :  通过一系列的名为 "GCRoot" 的对象作为起始点,从这些节点开始向下搜索,搜索所有走过的路径称为引用链,当一个对象到 CCRoot 没有任何引用链相连时,说明该对象不可用.
    • 可以作为 GCRoot 对象有:
    1. 虚拟栈(栈桢中本地变量表)中引用的对象
    2. 方法区中的类静态属性引用的对象
    3. 方法区中常量引用的对象
    4. 本地方法中 JVI(native 方法)的引用对象
    • 应用的分类:
    1. 强引用
    2. 软引用 : softReference, 软引用被回收在内存溢出之前
    3. 弱引用 : weakReference, 弱引用被回收在下一次 GC 回收之前
    4. 虚引用 : phantomReference

      "虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。
      虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃 圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是 否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

      特别注意,在程序设计中一般很少使用弱引用与虚引用,使用软引用的情况较多,这是因为软引用可以加速JVM对垃圾内存的回收速度,可以维护系统的运行安全,防止内存溢出(OutOfMemory)等问题的产生。

      以下是软引用的代码:

      复制代码
      import java.lang.ref.SoftReference;  
      public class Test {  
            
          public static void main(String[] args){  
              System.out.println("开始");           
              A a = new A();            
              SoftReference<A> sr = new SoftReference<A>(a);  
              a = null;  
              if(sr!=null){  
                  a = sr.get();  
              }  
              else{  
                  a = new A();  
                  sr = new SoftReference<A>(a);  
              }          
              System.out.println("结束");     
          }        
      }  
        
      class A{  
          int[] a ;  
          public A(){  
              a = new int[100000000];  
          }  
      }
  • 相关阅读:
    【javascript基础】JS计算字符串所占字节数
    mysql设置有外键的主键自增及其他
    spring AOP简单实现代码存放
    Dockerfile指令及docker的常用命令
    ubuntu 16.04 jenkins pipline的实现 最终docker启动服务
    ubuntu16.04 docker安装
    ubuntu16.04 nginx安装
    ubuntu14.04 spring cloud config server + gradle搭建
    ubuntu14.04 python2.7安装MySQLdb
    flask初次搭建rest服务笔记
  • 原文地址:https://www.cnblogs.com/bjxq-cs88/p/8565784.html
Copyright © 2011-2022 走看看