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

     
  • 相关阅读:
    java web分享ppt大纲 -- servlet容器简介
    Docker入门二
    Docker入门
    自动化运维
    堡垒机
    代码管理平台
    NoSQL(四)
    NoSQL(三)
    NoSQL(二)
    CentOS添加新网卡network-scripts目录下找不到网卡配置文件
  • 原文地址:https://www.cnblogs.com/413xiaol/p/6920818.html
Copyright © 2011-2022 走看看