Java对象的生命周期

package com.demo.gyw.java.jvm;

/**
 * @Author GouYaoWen
 * @Description 对象生命周期
 * 强引用: 在程序代码中普遍存在的,类似 Object obj = new Object() 这类引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
 * 1、创建阶段
 * 2、应用阶段
 * 3、不可见阶段
 * 4、不可达阶段
 * 5、收集阶段
 * 6、终结阶段
 * 7、对象空间重分配阶段
 * @Date Create in 11:20 2019/12/24
 */
public class ObjectLifeCycle {
    public static void main(String[] args) {
        create();//创建对象
        inUse();//对象引用阶段
        inVisible();//对象不可见阶段
        unReachable();//对象不可达阶段
        collected();//对象收集阶段
        finalized();//对象终结阶段
        deAllocated();//对象空间重新分配阶段
    }

    /**
     * 对象创建阶段
     */
    public static void create() {
        System.out.println("1、对象创建阶段:");
        System.out.println("    为对象分配存储空间");
        System.out.println("    开始构造对象");
        System.out.println("    从超类到子类对static成员进行初始化");
        System.out.println("    超类成员变量按顺序初始化,递归调用超类的构造方法");
        System.out.println("    子类成员变量按顺序初始化,子类构造方法调用");
    }

    /**
     * 对象引用阶段
     */
    public static void inUse() {
        System.out.println("2、对象应用阶段:");
        System.out.println("    对象被创建后,并且分派给某些变量赋值,对象状态切换为应用阶段。" +
                "应用阶段对象至少被一个强引用持有者。");
    }

    /**
     * 对象不可见阶段
     */
    public static void inVisible() {
        System.out.println("3、对象不可见阶段:");
        System.out.println("    (程序)本身不再持有该对象的任何强引用,即是超出该对象的作用域。");
    }

    /**
     * 对象不可达阶段
     */
    public static void unReachable() {
        System.out.println("4、对象不可达阶段:");
        System.out.println("    (对象)本身不再被任何强引用所持有," +
                "即是GC root(JVM已装载的静态变量、线程、JNI-Java Native Interface等)也不持有该对象的引用。");
    }

    /**
     * 对象收集阶段
     * 重载finalize()方法:
     *     1、影响JVM对象分配和回收速度(会造成两次GC)
     *     2、造成对象再次复活(重载中其他强引用再次持有该对象,对象状态收集--->应用阶段)
     */
    public static void collected() {
        System.out.println("5、对象收集阶段:");
        System.out.println("    垃圾回收器发现对象处于(不可达阶段)" +
                "且垃圾回收器本身对对象的内存空间重新分配做好准备时,进入对象收集阶段;" +
                "如果对象重写finalize()方法(最好不要重载该方法)则执行该方法。");
    }

    /**
     * 对象终结阶段
     */
    public static void finalized() {
        System.out.println("6、对象终结阶段:");
        System.out.println("    对象执行完finalize()方法后对象仍处于不可达状态时," +
                "进入该对象进入终结阶段,等待垃圾回收器对该对象空间进行回收。");
    }

    /**
     * 对象空间重新分配阶段
     */
    public static void deAllocated() {
        System.out.println("7、对象空间重新分配阶段:");
        System.out.println("    终结后对象彻底消息,属于对象空间重新分配阶段。");
    }
}
/*outPut:
        1、对象创建阶段:
        为对象分配存储空间
        开始构造对象
        从超类到子类对static成员进行初始化
        超类成员变量按顺序初始化,递归调用超类的构造方法
        子类成员变量按顺序初始化,子类构造方法调用
        2、对象应用阶段:
        对象被创建后,并且分派给某些变量赋值,对象状态切换为应用阶段。应用阶段对象至少被一个强引用持有者。
        3、对象不可见阶段:
        (程序)本身不再持有该对象的任何强引用,即是超出该对象的作用域。
        4、对象不可达阶段:
        (对象)本身不再被任何强引用所持有,即是GC root(JVM已装载的静态变量、线程、JNI-Java Native Interface等)也不持有该对象的引用。
        5、对象收集阶段:
        垃圾回收器发现对象处于(不可达阶段)且垃圾回收器本身对对象的内存空间重新分配做好准备时,进入对象收集阶段;如果对象重写finalize()方法(最好不要重载该方法)则执行该方法。
        6、对象终结阶段:
        对象执行完finalize()方法后对象仍处于不可达状态时,进入该对象进入终结阶段,等待垃圾回收器对该对象空间进行回收。
        7、对象空间重新分配阶段:
        终结后对象彻底消息,属于对象空间重新分配阶段。*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值