Java中关于内存泄漏分析和解决方案,都在这里了!
内 存 泄 漏 : 对 象 已 经 没 有 被 应 用 程 序 使 用 , 但 是 垃 圾 回 收 器 没
办 法 移 除 它 们 , 因 为 还 在 被 引 用 着 。
在 J a v a 中 , 内 存 泄 漏 就 是 存 在 一 些 被 分 配 的 对 象 , 这 些 对 象 有
下 面 两 个 特 点 , 首 先 , 这 些 对 象 是 可 达 的 , 即 在 有 向 图 中 , 存
在 通 路 可 以 与 其 相 连 ; 其 次 , 这 些 对 象 是 无 用 的 , 即 程 序 以 后
不 会 再 使 用 这 些 对 象 。 如 果 对 象 满 足 这 两 个 条 件 , 这 些 对 象 就
可 以 判 定 为 J a v a 中 的 内 存 泄 漏 , 这 些 对 象 不 会 被 G C 所 回 收 , 然
而 它 却 占 用 内 存 。
在 C + + 中 , 内 存 泄 漏 的 范 围 更 大 一 些 。 有 些 对 象 被 分 配 了 内 存 空 间
, 然 后 却 不 可 达 , 由 于 C + + 中 没 有 G C ( G a r b a g e
C o l l e c t i o n 垃 圾 回 收 ) , 这 些 内 存 将 永 远 收 不 回 来 。 在 J a v a 中 ,
这 些 不 可 达 的 对 象 都 由 G C 负 责 回 收 , 因 此 程 序 员 不 需 要 考 虑 这 部 分
的 内 存 泄 露 。
通 过 分 析 , 我 们 得 知 , 对 于 C + + , 程 序 员 需 要 自 己 管 理 边 和 顶 点 ,
而 对 于 J a v a 程 序 员 只 需 要 管 理 边 就 可 以 了 ( 不 需 要 管 理 顶 点 的 释 放 )
。 通 过 这 种 方 式 , J a v a 提 高 了 编 程 的 效 率 。