- 清理 Java 堆内存中不再需要的那些对象实例;
根据 JVM 运行原理,分析垃圾回收机制在上述代码运行流程中的作用:
public class kafka {
public static void main(){
loadReplicasFromDisk();
}
private static void loadReplicasFromDisk(){
ReplicaManager replicaManager = new ReplicaManager();
replicaManager.load();
}
}
- 首先一个 main 线程会执行主类 main() 方法中的代码;
- main 线程自己有一个 java 虚拟机栈,它会把 main() 方法的栈帧压入 java 虚拟机栈;
- main() 方法调用 loadReplicasFromDisk() 方法,就会创建一个 loadReplicasFromDisk() 的栈帧压入 java 虚拟机栈;
- loadReplicasFromDisk() 中有一个局部变量 replicaManager,会把这个变量放入到它对应栈帧的局部变量表中;
- loadReplicasFromDisk() 方法中创建了一个 ReplicaManager 类的实例对象,会在 Java 堆内存中为这个对象实例分配内存空间;
接下来,会执行 replicaManager 局部变量引用的 ReplicaManager 实例对象去执行它的 load() 方法;
load() 方法执行完毕,load() 对应的栈帧从 main 线程的 java 虚拟机里出栈;
- loadReplicasFromDisk() 执行完毕,loadReplicasFromDisk() 对应的栈帧从 main 线程的 java 虚拟机里出栈;
栈帧里的 replicaManager 局部变量没有了,没有任何变量指向 Java 堆内存里的 ReplicaManager 实例对象了;
在启动一个 JVM 进程的时候,它就会自带一个垃圾回收的后台线程,会在后台不断检查 JVM 堆内存中的各个实例对象;
- 垃圾回收线程,发现 ReplicaManager 实例对象没有任何一个方法的局部变量指向它,也没有任何一个类的静态变量,包括常量等地方指向它,那么把这个实例对象从内存清除,不再占用内存资源;