【问题标题】:Is it possible for a Java memory leak to use more memory than the heap + permgen? [duplicate]Java内存泄漏是否可能使用比堆+ permgen更多的内存? [复制]
【发布时间】:2014-04-04 19:18:20
【问题描述】:

在任何情况下,Java 应用程序(例如 Tomcat servlet 应用程序)中的泄漏是否有可能超过分配的内存并使用额外的系统内存,或者为 JVM 分配的堆是否真正被防火墙(可以这么说)来自(其余的)操作系统/内核内存?我正在使用 Java 6 和 7 在 2.6 Kernel Linux 中工作,但这是一个更普遍的问题。

【问题讨论】:

  • 是的。 JVM 可以通过多种方式消耗内存,而不是通过 Java 堆。例如,默认情况下,每个线程的堆栈占用 2Mb。如果您描述您遇到的问题,也许有人会帮助您解决这些问题。
  • 这确实是一个普遍的问题。我正在与一些 Java 开发人员进行电话会议,我建议内存泄漏可能会占用堆以外的系统内存,该项目的高级开发人员告诉我这是不可能的。我不同意这是不可能的,但我不知道具体情况,我相信我在过去看到过这种情况。

标签: java memory memory-leaks jvm


【解决方案1】:

是的 - 这是可能的。 Java 内存区域被划分为几个区域——heap 和 permgen 并不是全部。还有代码缓存和本机内存区域,这在所有堆结构中都非常流行。请看this presentation的幻灯片7

【讨论】:

  • 那个演示文稿看起来很搞笑。喜欢这些照片。
【解决方案2】:

当然,这是可能的。简单的例子是ByteBuffer.allocateDirect()FileChannel.map()。此类缓冲区的内容超出 Java Heap。

【讨论】:

    猜你喜欢
    • 2014-05-13
    • 1970-01-01
    • 2015-12-25
    • 2016-10-28
    • 2015-02-27
    • 2013-12-02
    • 2019-09-29
    • 2012-08-19
    • 2011-06-26
    相关资源
    最近更新 更多