Java 中的垃圾回收

垃圾回收器是一个自动管理内存的程序,其中对象的解除分配由 Java 而不是程序员处理。在 Java 编程语言中,使用 new 运算符实现对象的动态分配。创建的对象使用一些内存,并且内存保持分配状态,直到有对象的使用参考。

当没有对象的引用时,假定不再需要它,并且可以回收由该对象占用的内存。当 Java 自动处理解除分配时,没有明确需要销毁对象。

实现此目的的技术称为垃圾回收 - Garbage Collection。当系统中没有剩余内存要分配时,不取消分配内存的程序最终会崩溃,这些程序有内存泄漏。

Java 中的垃圾回收在程序的生命周期内自动发生,取消需要释放内存的需要,从而避免内存泄漏。在 C 语言中,程序员有责任使用 free() 函数取消分配动态分配的内存。这就是 Java 内存管理的领导地位。

注意:所有对象都在 Heap 内存部分中创建。在后面的教程中有更多相关内容。

示例:学习 Java 中的垃圾回收器机制

步骤 1: 将以下代码复制到编辑器中。

class Student{
    int a;
    int b;
    public void setData(int c,int d){
        a=c;
        b=d;
    }
    public void showData(){
        System.out.println("Value of a = "+a);
        System.out.println("Value of b = "+b);
    }
    public static void main(String args[]){
        Student s1 = new Student();
        Student s2 = new Student();
        s1.setData(1,2);
        s2.setData(3,4);
        s1.showData();
        s2.showData();
        //Student s3;
        //s3=s2;
        //s3.showData();
        //s2=null;
        //s3.showData();
        //s3=null;
        //s3.showData();
    }
}

步骤 2: 保存,编译并运行代码。如图所示,创建了两个对象和两个引用变量。

Java 中的垃圾回收是什么?

步骤 3: 取消注释行#20,21,22。保存,编译和运行代码。

步骤 4: 如下图所示,两个引用变量指向同一个对象。

Java 中的垃圾回收是什么?

步骤 5: 取消注释行#23 和 24.编译,保存并运行代码

步骤 6: 如下图所示,s2 变为 null,但 s3 仍指向该对象,不符合 java 垃圾回收的条件。

Java 中的垃圾回收是什么?

步骤 7: 取消注释行#25&26。保存,编译和运行代码

步骤 8: 此时没有指向对象的引用,并且有资格进行垃圾回收。它将从内存中删除,无法将其检索回来。

Java 中的垃圾回收是什么?

如何删除 Java 中的对象?

  1. 如果要使对象符合垃圾回收条件,请将其引用变量指定为 null。

  2. 原始类型不是对象。它们不能被指定为 null。