直接回答:内存泄漏指程序申请了内存但不再使用后未能释放,导致可用内存随时间不断被侵蚀。典型诱因有:忘记释放堆内存(C/C++ 中 malloc/new 后丢失指针、异常路径漏掉 free);对象被意外长期持有,如静态集合、全局缓存只增不减;事件监听、回调、定时器注册后未注销;引用计数式 GC 中的循环引用。

展开解析:泄漏的本质是"逻辑上已死、物理上仍可达"。带 GC 的语言并不能免疫——只要存在从 GC Root 可达的引用链,对象就不会被回收。排查思路是先用监控发现内存曲线只涨不跌,再用工具(Valgrind、heap dump、AddressSanitizer)定位分配点。常见追问:泄漏与内存溢出(OOM)的关系、如何设计弱引用缓存、RAII 如何防泄漏。

示例

void leak() {
    char *p = malloc(1024);
    p = NULL;        // 指针被覆盖,1KB 永远无法释放
}
// 闭包持有大对象 + 定时器未清理
function start() {
  const big = new Array(1e6).fill(0);
  setInterval(() => console.log(big.length), 1000); // big 常驻内存
}