Java应用程序中是否完全没有内存泄漏?

Bhu*_*han 7 java memory garbage-collection

可能重复:
使用Java创建内存泄漏

Java中有一个"垃圾收集器",但这是否意味着Java应用程序中完全没有内存泄漏?如果没有,它们是如何以及为什么发生的?

我对使用JavaSE的应用程序中的场景更感兴趣.

小智 15

否 - Java中仍然存在内存泄漏.他们只是一个"不同类型".

维基:记忆泄漏

计算机科学(或泄漏,在此上下文中)的内存泄漏发生在计算机程序消耗内存但无法将其[内存]释放回操作系统时.

对于Java,它(通常)是指未使用/不需要的对象永远不能进行回收.例如,对象可以存储在全局List中,即使以后从未访问过对象也不会被删除.在这种情况下,JVM不会释放对象/内存 - 它不能 - 因为稍后可能需要该对象,即使它永远不会.

(另外,一些对象,例如直接分配的ByteBuffers也会消耗"out of JVM heap"内存,由于终结器和内存压力的性质,这些内存可能无法及时回收.)

在Java的情况下,"内存泄漏"是一个语义问题,而不是"在任何情况下都无法释放"的问题.当然,有了错误的JNI/JNA代码,所有赌注都关闭;-)

快乐的编码.

  • 作为后续工作,没有垃圾收集器可以随时回收所有未使用的内存.建立一个可以检测某个内存是否永远不会被再次使用的GC是不可能的,因此大多数GC使用内存是否可以**作为代理. (2认同)