【问题标题】:JVM Memory : Why memory on task manager difference with JProbe (or JConsole tool)JVM 内存:为什么任务管理器上的内存与 JProbe(或 JConsole 工具)不同
【发布时间】:2012-08-14 14:08:57
【问题描述】:

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

【问题讨论】:

    标签: java memory jvm profiling monitoring


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 该死的,我想写这个……好吧,类似的东西:D。
    • 我算了堆+非堆内存,你能解释一下native部分吗?
    • @Cratylus 我可以看到HeapNon-heap 的内存消耗与JConsole。是否有任何工具可以监控 Java 应用程序的native 内存使用情况?
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2012-03-31
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2012-04-25
    相关资源
    最近更新 更多