垃圾回收

自动内存管理机制,负责回收不再被引用的对象所占用的内存空间,减轻程序员手动管理内存的负担。

核心原理

  • 可达性分析:垃圾回收器通过判断对象是否被其他对象引用来决定是否回收
  • 不关心出边:只关心对象是否有入边(被别人引用),不关心对象引用了谁
  • 根对象:从 GC Roots(栈帧中的局部变量、静态变量等)开始遍历

在数据结构中的注意事项

内存泄漏风险

在 Java 等带垃圾回收的语言中,删除元素后如果不手动置 null,可能造成内存泄漏:

// 删除尾部元素
size--;
// 如果 data[size] 持有对象引用,需要手动清除
data[size] = null; // 帮助垃圾回收

原因:如果不置 nulldata[size] 仍然持有对象引用,即使逻辑上已删除,垃圾回收器也不会释放该对象的内存。

链表中的内存管理

  • 删除节点时,不仅要修改指针,还要断开被删除节点的引用
  • 双向链表需要同时处理 prevnext 指针

相关概念

  • 动态数组:动态数组删除元素时的内存泄漏防护
  • 双链表:双链表节点删除时的引用处理

Interactive Graph