面试题答案
一键面试- 创建阶段:
- 特点:为对象分配内存空间,初始化对象的成员变量为默认值,并调用构造函数。
- 涉及操作:使用
new
关键字来实例化对象,例如MyClass obj = new MyClass();
。构造函数用于执行对象的初始化逻辑,如给成员变量赋予初始值等。
- 使用阶段:
- 特点:对象处于可操作状态,可以调用对象的方法,访问和修改对象的成员变量。
- 涉及操作:通过对象引用调用方法,如
obj.someMethod();
,也可以访问和修改成员变量,如obj.someVariable = value;
。
- 不可达阶段:
- 特点:对象不再被任何活跃的引用所指向,从应用程序的角度来看,该对象已无法访问。
- 涉及操作:当对象的所有引用都被释放(如将引用变量赋值为
null
),对象进入不可达状态。此时,垃圾回收器开始关注该对象,但并不立即回收。
- 垃圾回收阶段:
- 特点:垃圾回收器检测到对象不可达后,回收该对象占用的内存空间。
- 涉及操作:垃圾回收器在合适的时机(如内存不足等情况)运行,自动释放不可达对象的内存。在Java中,程序员无法精确控制垃圾回收的时机,但可以通过调用
System.gc()
来建议垃圾回收器运行,但这只是建议,不一定会立即执行。
- 终结阶段:
- 特点:在对象被垃圾回收之前,会调用对象的
finalize()
方法(如果该对象重写了此方法),提供对象最后一次清理资源(如关闭文件、释放数据库连接等)的机会。 - 涉及操作:重写
finalize()
方法来实现资源清理逻辑,例如:
- 特点:在对象被垃圾回收之前,会调用对象的
protected void finalize() throws Throwable {
// 清理资源的代码,如关闭文件等
super.finalize();
}
不过需要注意,finalize()
方法不保证一定会被调用,且由于其运行在垃圾回收线程中,可能导致性能问题,所以Java 9开始已标记为过时。
6. 销毁阶段:
- 特点:对象占用的内存被完全释放,对象从内存中消失。
- 涉及操作:垃圾回收器完成对象内存的回收,对象彻底销毁,内存空间可被重新分配使用。