我正在阅读Java的垃圾收集here和here。我还有两个问题。
假设我有以下课程
public final class Employee {
private final String empID;
private final String empFirstName;
private final String empLastName;
public Employee(String ID, String Firstname, String Lastname)
{
this.empID = ID;
this.empFirstName = Firstname;
this.empLastName = Lastname;
}
public String getEmpID() {
return empID;
}
public String getEmpFirstName() {
return empFirstName;
}
public String getEmpLastName() {
return empLastName;
}
我将员工对象添加到ArrayList
。
List<Employee> empList = new ArrayList<Employee>();
empList.add(new Employee("1", "Sally","Solomon"));
empList.add(new Employee("2", "Harry","Solomon"));
现在,如果我在插入最后一个员工对象后立即调用System.exit(0)
,那么GC何时运行以释放内存?
答案 0 :(得分:3)
如果我在插入最后一个员工对象后立即调用
System.exit(0)
,那么GC何时运行以释放内存?
当JVM退出时,它不需要运行自己的垃圾收集器来释放内存。当进程退出时,操作系统将回收进程的内存。
这不是JVM特有的。
使用静态变量时如何释放内存?
您可以清空或以其他方式删除对这些静态对象的引用。还有其他一些可能性:Are static fields open for garbage collection?
应用程序关闭后是否会释放内存?
是的,但不一定是JVM的GC。操作系统会处理它 - 这是其工作的一部分。