【发布时间】:2018-06-19 22:09:24
【问题描述】:
在C/C++ 中遇到一些内存泄漏后,我想知道Java 中是否存在内存泄漏。快速搜索将我带到以下stackoverflow thread。
@david-wasser 对这个帖子的评论是:
对象A -> 对象B
在此示例中,ObjectA 是代码中正在使用的对象。 但是,ObjectA 包含对 ObjectB 的引用,该引用有效地 死(即:ObjectB 已被分配和使用,现在,从 程序员的观点,死了)但程序员忘记设置 ObjectA 中的引用为空。在这种情况下,ObjectB 已经“泄露”了。
我不太明白为什么垃圾收集器不能解决这个问题?垃圾收集器的工作不就是解决那种memory leaks吗?
另外,我想看一个实现这个想法的基本简短示例。
P.S 我更愿意为此开一个新帖子,而不是在一个 6 岁的老人中发表评论。
【问题讨论】:
-
顺便说一句,对旧答案发表评论并没有错。如果您查看您引用的人的个人资料,您甚至会看到他们在 4 小时前使用过该网站,仍然活跃在该网站上。
-
Wasser 先生的意思是,如果 ObjectA 仍然可以访问,并且 ObjectA 具有对 ObjectB 的引用,那么 ObjectB 仍然可以访问。这是应该的方式。在 Java 中创建内存泄漏实际上非常困难 - 我确实知道至少有一种情况是程序员无意中泄漏了一些内存,但显然,在 Java 中发生这种情况的可能性比在 C 或 C++ 中要小。
-
垃圾收集器可以删除不再引用的对象。但他们无法对仍被引用但不再使用的对象做任何事情。
标签: java memory-leaks