System.Exit后的垃圾收集

时间:2016-09-14 22:31:27

标签: java garbage-collection

我正在阅读Java的垃圾收集herehere。我还有两个问题。

  1. 假设我有以下课程

    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;
    }
    
  2. 我将员工对象添加到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何时运行以释放内存?

    1. 在其中一个链接中,它讨论了GC和静态变量。我对GC概念有点新意,有点困惑。链接说静态变量不会被垃圾收集。使用静态变量时如何释放内存?应用程序关闭后是否会释放内存?

1 个答案:

答案 0 :(得分:3)

  

如果我在插入最后一个员工对象后立即调用System.exit(0),那么GC何时运行以释放内存?

当JVM退出时,它不需要运行自己的垃圾收集器来释放内存。当进程退出时,操作系统将回收进程的内存。

这不是JVM特有的。

  

使用静态变量时如何释放内存?

您可以清空或以其他方式删除对这些静态对象的引用。还有其他一些可能性:Are static fields open for garbage collection?

  

应用程序关闭后是否会释放内存?

是的,但不一定是JVM的GC。操作系统会处理它 - 这是其工作的一部分。