【问题标题】:how to get the memory used by a java process in java如何在java中获取java进程使用的内存
【发布时间】:2009-01-30 04:09:26
【问题描述】:

我正在通过部署自己的类来运行JBOSS服务器。现在我开始对我的应用程序进行一些操作。现在我想知道我的应用程序在执行操作之前和之后使用的内存。请在这方面支持我

【问题讨论】:

    标签: java memory


    【解决方案1】:

    通过使用 MemoryMXBean (通过调用检索 ManagementFactory.getMemoryMXBean()) 也 Runtime.getRuntime() 的方法: .totalMemory(), .maxMemory().freeMemory().

    请注意,这不是一门精确的艺术:在创建新对象时,可能会分配其他临时对象,这不会为您提供准确的测量结果。众所周知,java 垃圾回收是无法保证的,因此您不一定可以这样做来消除死对象。

    如果您进行研究,您会发现大多数尝试进行这些测量的代码都会有 Runtime.gc() 调用和休眠等循环,以尝试确保测量准确。这仅适用于某些 JVM 实现...

    在应用服务器/已部署的应用程序上,您可能只会在分配堆和触发 gc 时获得粗略的测量/使用变化,但这应该足够了。 [我假设您不会实现 gc() 并在生产代码中休眠 :)]

    【讨论】:

      【解决方案2】:

      在执行Runtime.getRuntime().freeMemory()操作前获取空闲内存,完成操作后再获取,即可获得操作使用的内存。

      【讨论】:

      • 如果另一个线程在两次调用 freeMemory() 之间做了很多事情......这就是这些事情的问题......海森堡是一个非常聪明的人:)
      【解决方案3】:

      你可能会发现你得到的结果是不确定的。 GC 将在后台随机点清理已使用的内存,因此您可能会发现,如果多次运行相同的操作会得到不同的结果。您甚至可以在执行操作后似乎有更多可用内存。

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 2017-11-11
        • 1970-01-01
        • 2021-07-03
        • 2013-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多