zoukankan      html  css  js  c++  java
  • JVM垃圾回收时的可触及性

    可触及的
      1.从根节点可以触及到这个对象
    可复活的
      1.一旦所有引用被释放,就是可复活状态
      2.因为在finalize()中可能复活该对象
    不可触及的
      1.在finalize()后,可能会进入不可触及状态
      2.不可触及的对象不可能复活
      3.可以回收

    package vm;
    
    /**
     * Created by Administrator on 2017/5/30.
     */
    public class CanReliveObj {
        public static CanReliveObj obj;
        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.println("CanReliveObj finalize called");
            obj=this;
        }
        @Override
        public String toString(){
            return "I am CanReliveObj";
        }
        public static void main(String[] args) throws InterruptedException{
            obj=new CanReliveObj();
            obj=null;   //可复活
            System.gc();
            Thread.sleep(1000);
            if(obj==null){
                System.out.println("obj 是 null");
            }else{
                System.out.println("obj 可用");
            }
            System.out.println("第二次gc");
            obj=null;    //不可复活
            System.gc();
            Thread.sleep(1000);
            if(obj==null){
                System.out.println("obj 是 null");
            }else{
                System.out.println("obj 可用");
            }
        }
    }

    CanReliveObj finalize called
    obj 可用
    第二次gc
    obj 是 null

     
  • 相关阅读:
    1-4 Autolayout
    1-3 UIScrollView
    lua 的语法糖
    javascript文档
    cocos2d 图片模糊
    a*寻路分析
    class按传递时分析
    mac 不再接受预览版提示
    OS X 10.11 El Capitan 三指拖动的开启方法
    mac系统卸载mono
  • 原文地址:https://www.cnblogs.com/413xiaol/p/6920818.html
Copyright © 2011-2022 走看看