垃圾回收
自动内存管理机制,负责回收不再被引用的对象所占用的内存空间,减轻程序员手动管理内存的负担。
核心原理
- 可达性分析:垃圾回收器通过判断对象是否被其他对象引用来决定是否回收
- 不关心出边:只关心对象是否有入边(被别人引用),不关心对象引用了谁
- 根对象:从 GC Roots(栈帧中的局部变量、静态变量等)开始遍历
在数据结构中的注意事项
内存泄漏风险
在 Java 等带垃圾回收的语言中,删除元素后如果不手动置 null,可能造成内存泄漏:
// 删除尾部元素
size--;
// 如果 data[size] 持有对象引用,需要手动清除
data[size] = null; // 帮助垃圾回收
原因:如果不置 null,data[size] 仍然持有对象引用,即使逻辑上已删除,垃圾回收器也不会释放该对象的内存。
链表中的内存管理
- 删除节点时,不仅要修改指针,还要断开被删除节点的引用
- 双向链表需要同时处理
prev和next指针