什么是垃圾回收(Garbage Collection)?

垃圾回收(Garbage Collection)是一种自动管理内存的机制,在编程语言中,它负责自动检测和释放不再被程序使用的内存,以避免内存泄漏和内存碎片的问题。

以下是一段示例代码:

复制代码
public class Example {
  public static void main(String[] args) {
    // 创建一个对象
    Person person = new Person("John", 25);
    
    // 输出对象的信息
    System.out.println(person.toString());
    
    // 将对象置为空,使其成为垃圾
    person = null;
    
    // 手动请求垃圾回收
    System.gc();
    
    // 输出对象的信息,预期应该为 null
    System.out.println(person.toString());
  }
}

class Person {
  private String name;
  private int age;
  
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("Person object is garbage collected");
  }
}

注释如下:

java 复制代码
public class Example {
  public static void main(String[] args) {
    // 创建一个对象
    Person person = new Person("John", 25);
    
    // 输出对象的信息
    System.out.println(person.toString());
    
    // 将对象置为空,使其成为垃圾
    person = null;
    
    // 手动请求垃圾回收
    System.gc();
    
    // 输出对象的信息,预期应该为 null
    System.out.println(person.toString());
  }
}
java 复制代码
class Person {
  private String name;
  private int age;
  
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("Person object is garbage collected");
  }
}
  • public class Example:定义了一个公共的类 Example。
  • public static void main(String[] args):主函数,程序的入口点。
  • Person person = new Person("John", 25);:创建一个 Person 类的对象 person,传入参数 "John" 和 25。
  • System.out.println(person.toString());:调用 person 对象的 toString() 方法并打印返回的字符串。
  • person = null;:将 person 对象的引用置为 null,这样它不再被引用,成为了垃圾。
  • System.gc();:手动请求垃圾回收。
  • System.out.println(person.toString());:尝试调用 person 对象的 toString() 方法并打印返回的字符串,预期结果应为 null。
  • class Person:定义了一个名为 Person 的类。
  • private String name; 和 private int age;:定义了 Person 类的私有属性 name 和 age。
  • public Person(String name, int age):Person 类的构造函数,用于初始化对象的属性。
  • public String toString():重写了 Object 类的 toString() 方法,返回一个字符串表示 Person 对象的信息。
  • protected void finalize() throws Throwable:重写了 Object 类的 finalize() 方法,当对象被垃圾回收时会调用该方法,这里添加了一个打印语句,用于确认对象是否被回收。
相关推荐
-Marks-13 分钟前
【C++编程】STL容器(二)--- vector底层模拟实现(常用接口实现 | 扩容机制 | 深浅拷贝 | 迭代器失效)
开发语言·c++·vector·内存管理·迭代器失效·vector底层模拟实现
Shadow(⊙o⊙)31 分钟前
C++11并发支持库
开发语言·c++
一技安身32 分钟前
【java】JDK8 + JDK17 绿色解压共存方案-全程不修改任何系统环境变量
java·开发语言
飘尘33 分钟前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
java、iOS、Vue1 小时前
Maven antrun vs Jenkins 脚本组装 deb的优缺点、适用场景
java·jenkins·maven
夏幻灵1 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展
hudd6681 小时前
JavaEE 初阶 - 多线程(初阶)
java·开发语言·java-ee
I Am a robert girl1 小时前
稀有事件估计的迭代去对齐:从源码视角拆解重要性采样新范式
开发语言·python·机器学习·重要性采样·蒙特卡洛方法·稀有事件估计
CarIise2 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: Feign 的性能优化
java·spring cloud·性能优化