9

我面临的问题是我的应用程序使用的内存只有 100MB,之后它减少了 50MB,但是在 Window 任务管理器上它显示 150MB 并且始终保持或增加但不减少,我们如何减少任务管理器上的内存(私有工作集)?

4

1 回答 1

13

您在JConsole(或其他监视工具)中看到的是使用 java 内存的模式。

JVM 的内存通常在这些区域之间划分(您也可以在监控工具中看到)。

  1. 用于 Java 对象的堆内存
  2. 非堆内存,这是 java 存储加载的类和元数据以及 JVM 代码的地方
  3. 本机内存是为 dll 和 Java 的本机代码(非常低级别)保留的内存的一部分。有时,当您获得足够的堆内存时,您可能会在该区域获得 OOM(因为随着Max Heap大小的增加,它会减少可用的本机内存)。

windows任务管理器没有显示。它显示了您的应用程序使用的整个内存(堆 + 非堆 + 本机部分)。

另请注意,通常进程会从操作系统请求更多内存,即使实际应用程序“释放”内存,这些内存也会由它们保留。这些内存页已被映射为进程地址空间的一部分。因此,在您的任务管理器中,您不会看到内存减少的模式,但这并不表示您的应用程序存在内存泄漏。
所以你不能减少你从任务管理器看到的内存,但是你从监控工具看到的内存应该会在某个时候减少,否则这可能表明内存泄漏

于 2012-08-18T09:30:22.967 回答