JVM内存:为什么任务管理器上的内存与JProbe(或JConsole工具)不同

时间:2012-08-18 09:24:30

标签: java memory jvm profiling monitoring

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

1 个答案:

答案 0 :(得分:11)

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

JVM的内存通常分为这些区域(您还可以在监视工具中看到)。

  1. 用于Java对象的堆内存
  2. 非堆内存,这是java存储加载类的地方 和元数据以及JVM代码
  3. 本机内存,它是为dll和。保留的内存的一部分 Java的本机代码(非常低级)。有时你可以获得一个OOM 在这个区域,你有足够的堆内存(因为你 增加Max Heap大小,它减少了本机内存 可用)。
  4. Windows任务管理器没有显示。它显示了应用程序使用的整个内存(堆+非堆+本机部分)。

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