This question already has answers here:
Will calling System.exit(0); from an object outside of main run garbage collection?
(3个答案)
3年前关闭。
我正在阅读有关Java的垃圾回收here和here的文章。我还有两个问题。
假设我有以下课程
然后将我的员工对象添加到
现在,如果要在插入最后一个雇员对象后立即调用
在提供的链接之一中,它讨论了GC和静态变量。我对GC概念有点陌生,有些困惑。该链接说静态变量将不会被垃圾收集。使用静态变量时如何释放内存?关闭应用程序后会释放内存吗?
(3个答案)
3年前关闭。
我正在阅读有关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何时运行以释放内存?在提供的链接之一中,它讨论了GC和静态变量。我对GC概念有点陌生,有些困惑。该链接说静态变量将不会被垃圾收集。使用静态变量时如何释放内存?关闭应用程序后会释放内存吗?
最佳答案
如果我在插入最后一个雇员对象后立即调用System.exit(0)
,GC何时运行以释放内存?
当JVM退出时,它不需要运行自己的垃圾收集器即可释放内存。进程退出时,操作系统将回收该进程的内存。
这不是特定于JVM的东西。
使用静态变量时如何释放内存?
您可以清空或删除对这些静态对象的引用。还有其他一些可能性:Are static fields open for garbage collection?
关闭应用程序后会释放内存吗?
是的,但不一定是JVM的GC。操作系统负责它-这是其工作的一部分。
10-07 16:12