Android培训
美国上市Android培训机构

400-111-8989

热门课程

Android面试题-Java对象生命周期

  • 时间:2017-06-27
  • 发布:Android培训
  • 来源:Android职场

Java对象在虚拟机上运行有7阶段:创建、应用、不可见、不可达、收集、终结、对象空间重新分配。

(1)创建阶段(Created)

创建Java对象阶段的具体步骤如下:

①为对象分配存储空间;

②构造对象;

③从超类到子类对static成员进行初始化,类的static成员的初始化在ClassLoader加载该类时进行;

④超类成员变量按顺序初始化,递归调用超类的构造方法;

⑤子类成员变量按顺序初始化,一旦对象被创建,子类构造方法就调用该对象并为某些变量赋值,完成后这个对象的状态就切换到了应用阶段。

(2)应用阶段(InUse)

对象至少被一个强引用持有。除非在系统中显式地使用了软引用、弱引用或虚引用。

(3)不可见阶段(Invisible)

处于不可见阶段的对象在虚拟机的对象引用根集合中再也找不到直接或间接的强引用,这些对象一般是所有线程栈中的临时变量。所有已经装载的静态变量或是对本地代码接口的引用。

当一个对象处于不可见阶段时,说明程序本身不再持有该对象的任何强引用,虽然该对象仍然存在。该对象可能被虚拟机中的某些已装载的静态变量线程或JNI等强引用持有,这些特殊的强引用称为“GC Root”。存在这些GC Root会导致对象的内存泄漏,无法被回收。

(4)不可达阶段(Unreachable)

对象处于不可达阶段是指该对象不再被任何强引用持有,回收器发现该对象已经不可达。

(5)收集阶段(Collected)

当垃圾回收器发现该对象已经处于“不可达阶段”并且垃圾回收器已经对该对象的内存空间重新分配做好准备时,对象进入“收集阶段”。如果该对象已经重写了finalize()方法,则执行该方法的操作。

(6)终结阶段(Finalized)

当对象执行完finalize()方法后仍然处于不可达状态时,该对象进入终结阶段。在该阶段,等待垃圾回收器回收该对象空间。

(7)对象空间重新分配阶段(Deallocated)

若垃圾回收器对该对象占用的内存空间进行回收或者再分配,则该对象彻底消失,这个阶段称为“对象空间重新分配阶段”。

在Java语言中,可以作为GC Roots的对象包括下面几种:

虚拟机栈(栈帧中的本地变量表)中引用的对象;

方法区中类静态属性引用的对象;

方法区中常量引用的对象;

本地方法栈中JNI(即一般说的Native方法)引用的对象;

总结就是,方法运行时,方法中引用的对象;类的静态变量引用的对象;类中常量引用的对象;Native方法中引用的对象,所有正在运行的线程的栈上的引用变量、所有的全局变量、所有ClassLoader。

上一篇:快30了,零基础,能不能学好编程技术?
下一篇:如何提升你的能力?给年轻程序员的几条建议

Android 性能优化的方面方面都在这儿

2017年Android 校招面试总结

我的 Android 面试故事 | 13家面试记录

走心的Android工程师跳槽经验分享

选择城市和中心
贵州省

广西省

海南省