java - JVM内存: Why memory on task manager difference with JProbe (or JConsole tool)

标签 java memory jvm profiling monitoring

我遇到的问题是我的应用程序使用的内存只有 100MB,之后它减少了 50MB,但是在窗口任务管理器上它显示 150MB 并且总是保持或增加而不是减少, 我们如何 reduce task 管理器上的内存(私有(private)工作集)?

最佳答案

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

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

  1. 用于 Java 对象的堆内存
  2. 非堆内存是java存储加载类的地方 元数据和 JVM 代码
  3. native 内存是为 dll 和 Java的 native 代码(非常低级)。有时你会得到一个OOM 在这个区域,当你有足够的堆内存时(因为你 增加 Max Heap 大小,它会减少 native 内存 可用)。

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

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

关于java - JVM内存: Why memory on task manager difference with JProbe (or JConsole tool),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017437/

相关文章:

java - 我怎样才能保护自己免受 zipper 炸弹的伤害?

java - 如何确定应用程序启动时的 Java 堆大小

java - 多核上的jvm

java - 在命令行中分析正在运行的 Java 应用程序

java - 如何使用 JpaItemWriter 更新现有实体?

java - 如何在Java中按值嵌套值(ArrayList)对Map进行排序?

java - URLClassLoader 将 Annotation 加载为 com.sun.$Proxy$27

c++ - 释放从 char* 创建的 _bstr_t

c - 是内存泄漏,还是函数调用的限制,还是什么?

optimization - 如何优化 JVM 的内存使用?