Java内存泄漏是否可能使用比堆更多的内存;永久基因?
在任何情况下,Java应用程序(例如Tomcat servlet应用程序)中的泄漏是否可能超过分配的内存并使用额外的系统内存,或者JVM的分配堆是否真的从(剩余的)操作系统/内核内存进行防火墙(也就是说)?我在使用Java 6和7的2.6内核Linux中工作,但这更像是一个一般性问题。是的-这是可能的。Java内存区域被划分为几个区域——heap和permgen并不是全部。还有代码缓存和本机内存区域,这在所有堆结构中都非常流行。请看幻灯片7,当然,这是可能的。简单的例子有Java内存泄漏是否可能使用比堆更多的内存;永久基因?,java,memory,memory-leaks,jvm,Java,Memory,Memory Leaks,Jvm,在任何情况下,Java应用程序(例如Tomcat servlet应用程序)中的泄漏是否可能超过分配的内存并使用额外的系统内存,或者JVM的分配堆是否真的从(剩余的)操作系统/内核内存进行防火墙(也就是说)?我在使用Java 6和7的2.6内核Linux中工作,但这更像是一个一般性问题。是的-这是可能的。Java内存区域被划分为几个区域——heap和permgen并不是全部。还有代码缓存和本机内存区域,这在所有堆结构中都非常流行。请看幻灯片7,当然,这是可能的。简单的例子有ByteBuffer.a
ByteBuffer.allocateDirect()
和FileChannel.map()
。这些缓冲区的内容超出了Java堆。是。JVM可以通过多种方式使用内存,而不是通过Java堆。例如,默认情况下,每个线程的堆栈都需要2Mb。如果你描述你所看到的问题,也许有人会帮你解决。这实际上是一个一般性的问题。我与一些Java开发人员进行了一次电话会议,我建议内存泄漏可能会吞噬堆外的系统内存,项目的高级开发人员告诉我这是不可能的。我不同意这是不可能的,但我不知道具体细节,我相信我在过去见过这种情况。那场演讲看起来很滑稽。我喜欢这些照片。