可能重复:
如何在Java中创建内存泄漏?
Java中有一个“垃圾回收器”,但这是否意味着Java应用程序完全不存在内存泄漏?如果不是,它们如何发生以及为什么会发生?
我更感兴趣的是使用JavaSE的应用程序中的场景。
可能重复:
如何在Java中创建内存泄漏?
Java中有一个“垃圾回收器”,但这是否意味着Java应用程序完全不存在内存泄漏?如果不是,它们如何发生以及为什么会发生?
我更感兴趣的是使用JavaSE的应用程序中的场景。
取决于你如何定义内存泄漏。
如果你特指已分配的内存不再被某些内存根引用,那么垃圾回收器最终会清理所有这些内存。
如果你一般地指内存占用量无限增长,那是很容易实现的。只需让某个集合由静态字段引用并不断添加即可。
Java中存在内存泄漏的可能性。这里有一篇很好的文章,其中使用了核心Java的示例。从根本上讲,在Java中发生内存泄漏是因为垃圾收集器无法回收一个对象,因为应用程序持有对它的引用,即使对象本身可能不再被使用。在Java中创建内存泄漏的最简单方法是让应用程序持有对某个东西的引用,但不使用它。
在这个示例中,未使用的对象是一个静态列表,向该列表添加内容最终会导致JVM耗尽内存。静态集合通常是“泄漏”的常见来源,因为它们通常具有长寿命和可变性。