Java对象生命周期

1. 建立阶段(Created)

  • 为对象分配存储空间
  • 开始构造对象
  • 从父类到子类对static成员进行初始化
  • 父类成员变量按照顺序初始化,递归调用父类的构造方法
  • 子类成员变量按照顺序初始化,子类构造方法调用
    一旦对象被建立,并有某个引用指向它,这个对象的状态就切换到了应用阶段(In Use)

2. 应用阶段(In Use)

对象至少被一个强引用持有而且对象在做用域内code

3. 不可见阶段(Invisible)

程序自己再也不持有该对象的任何强引用,可是这些引用可能还存在着;
通常具体是指程序的执行已经超过该对象的做用域对象

4. 不可达阶段(Unreachable)

该对象再也不被任何强引用所持有;
可能仍被JVM等系统下的某些已经装载的惊天变灵或者线程或JNI所持有,这些特殊的强引用被称为GC root,这种状况容易致使内存泄露,没法被回收递归

5. 收集阶段(Collected)

对象不可达,而且GC已经准备好对该对象占用的内存空间从新分配的时候,处于手机阶段。
若是重写了finazlie()方法,则会去执行该方法。内存

尽可能不要重写finazlie()方法,由于有可能影响JVM的对象分配与回收速度或者可能形成该对象的再次复活作用域

6. 终结阶段

当对象执行完finalize()方法以后,仍然处于不可达状态时,则该对象进入终结阶段。在这个阶段,内存空间等待GC进行回收it

7. 对象空间的从新分配

GC对该对象占有的内存空间进行回收或者再分配,该对象完全消失class

相关文章
相关标签/搜索