对象的生命周期从创建到回收共经历四个阶段:首先通过new关键字在堆中分配内存并初始化;随后通过引用被程序使用,只要存在引用链即保持可达;当所有引用消失或置为null时,对象变为不可达;最后由JVM的垃圾收集器在不确定时间回收内存,若重写了finalize方法则可能被调用,但不推荐依赖此机制。掌握这一过程有助于避免内存泄漏,提升程序效率。
在Java中,理解对象的生命周期有助于更好地管理内存和编写高效的程序。对象的生命周期指的是从创建到销毁的整个过程,主要包括以下几个阶段:创建、使用、不可达和回收。
对象的创建
对象的创建通常通过 new 关键字完成。JVM会在堆内存中为对象分配空间,并调用构造方法初始化对象。
例如:User user = new User();
这行代码执行时,JVM做了几件事:加载类信息、分配内存、调用构造函数、返回引用。此时对象进入生命周期的第一阶段。
对象的使用
创建后,对象可以通过引用来访问其属性和

在这个阶段,对象可以被多个引用指向,也可以被传递给方法或存储在集合中。
常见情况包括:- 局部变量引用对象
- 对象作为参数传入方法
- 被放入List、Map等集合中
- 被静态变量持有
对象变为不可达
当程序不再有任何引用指向某个对象时,它就变成了“不可达”状态。这是垃圾回收的前提条件。
比如:
User user = new User();
user = null; // 原来的对象如果没有其他引用,就变成不可达
或者超出作用域的局部变量所引用的对象,也可能变为不可达。
JVM通过可达性分析算法判断对象是否存活,从GC Roots出发,无法被引用到的对象将被标记为可回收。
垃圾回收与 finalize(可选)
垃圾收集器(GC)在适当的时候运行,回收不可达对象占用的内存。这个时间点不确定,由JVM决定。
在回收前,如果类重写了 finalize() 方法,JVM会尝试调用它。但不推荐依赖 finalize() 来释放资源,因为它的执行时机不可控,甚至可能不被执行。
更好的做法是手动管理资源,比如实现 AutoCloseable 接口并配合 try-with-resources 使用。
基本上就这些。掌握对象何时被创建、如何保持可达、什么时候会被回收,能帮助你避免内存泄漏,写出更健壮的Java代码。








