我遇到的问题是我的应用程序使用的内存只有 100MB,之后它减少了 50MB,但是在窗口任务管理器上它显示 150MB 并且总是保持或增加而不是减少, 我们如何 reduce task 管理器上的内存(私有(private)工作集)?
最佳答案
您在 JConsole
(或其他监控工具)中看到的是 java 内存的使用模式。
JVM 的内存通常在这些区域之间划分(您也可以在监控工具中看到)。
- 用于 Java 对象的堆内存
- 非堆内存是java存储加载类的地方 元数据和 JVM 代码
- 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/