1. JVM 垃圾回收 简介

1.1. 什么是JVM的垃圾回收

JVM的垃圾回收机制(Garbage Collection,简称GC)是Java内存管理的核心组件,它的存在解决了手动内存管理带来的诸多问题。

1.2. 垃圾回收机制的核心作用

  1. 自动内存管理

    • 自动识别并回收不再使用的对象内存
    • 程序员无需手动调用free()delete释放内存
  2. 防止内存泄漏

// 没有GC的语言可能出现的内存泄漏示例(C++)
void leakMemory() {
   while(true) {
       Object* obj = new Object();  // 分配后没有释放
   }
}
  1. 避免野指针问题
    • 自动回收确保不会访问已释放的内存
    • 对比C++中的悬垂指针问题:
int* ptr = new int(5);
delete ptr;
*ptr = 10;  // 危险!访问已释放内存

1.3. 为什么要垃圾回收?

回顾之前文章,Java 内存是如何使用的?程序执行的时候,Java 栈内存可能会有局部变量,引用堆中的地址(对象实例的位置)。

现在有一个核心点:在Java堆内存里创建的对象,都是占用内存资源的,而且内存资源有限

当程序执行结束后,方法及局部变量会出栈,导致堆内存中的对象没有其他地方来引用,这时这个对象会一直在堆内存中存在,时间越久,这种没有被引用的对象会越来越多,应该怎么办呢?

所以问题的答案来了:需要JVM 垃圾回收机制

JVM本身是有垃圾回收机制的,它是后台自动运行的线程,只要启动一个JVM进程,就会自带一个垃圾回收的后台线程。

如果对象没有任何一个方法的局部变量指向它,也没有任何一个类的静态变量、常量等指向它。这个对象可以称为 垃圾对象

这个线程会在后台不断检查JVM堆内存中的各个实例对象,当变成 垃圾对象 的时候,垃圾回收器会定期清除掉垃圾,释放 JVM 的存储空间。

1.4. JVM 自己实现垃圾回收的好处

1. 解决手动内存管理的痛点

问题类型 手动管理(C/C++) JVM垃圾回收
忘记释放内存 内存泄漏 自动回收
重复释放内存 程序崩溃 无需手动释放
访问已释放内存 未定义行为 安全访问

2. 提升开发效率

  • 开发者专注业务逻辑而非内存管理
  • 减少约70%与内存相关的bug(来源:IBM研究数据)

3. 保障系统稳定性

// Java中即使循环创建对象也不会泄漏
void safeCreation() {
   while(true) {
       // GC会自动回收不再使用的对象
       Object obj = new Object(); 
   }
}

results matching ""

    No results matching ""