一、生命周期
- 创建阶段(Created):创建Java对象
- 为对象分配内存空间。
- 构造对象。
- 从超类到子类对static成员进程初始化,类的static成员的初始化在ClassLoader加载该类时进行。
- 超类成员变量按顺序初始化化,递归调用超类的构造函数。
- 子类成员变量按顺序初始化,一旦对象被创建,子类的构造函数就调用该对象并为一些变量赋值。完成以上这些后对象的状态就切换到了应用阶段InUse。
- 应用阶段(InUse):对象至少被一个强引用持有,除非显示的使用软引用、弱引用、虚引用。
- 不可见阶段(Invisible):不可见阶段的对象在虚拟机的对象根引用集合中再也找不到直接或者间接的强引用,最常见的就是线程或者函数中的临时变量。
- 不可达阶段(Unreachable):指对象不再被任何强引用持有,GC发现该对象已经不可达。
- 收集阶段(Collected):GC发现对象处于不可达阶段并且GC已经对该对象的内存空间重新分配做好准备,对象进程收集阶段。如果,该对象的finalize()函数被重写,则执行该函数。
- 终结阶段(Finalized):对象的finalize()函数执行完成后,对象仍处于不可达状态,该对象进程终结阶段。
- 对象内存空间重新分配阶段(Deallocaled):GC对该对象占用的内存空间进行回收或者再分配,该对象彻底消失。