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

     
  • 相关阅读:
    Makefile编写
    C++静态库与动态库
    C语言编译过程详解
    Fiddler抓HTTPS
    web测试的一些关注点
    Appium使用过程中的一些坑
    Jmeter+Maven+Jenkins的搭建笔记
    华为DHCP+VLANDHCP RELAY配置重点
    华为GVRP配置重点
    802.11协议总结
  • 原文地址:https://www.cnblogs.com/413xiaol/p/6920818.html
Copyright © 2011-2022 走看看