【发布时间】:2009-01-30 04:09:26
【问题描述】:
我正在通过部署自己的类来运行JBOSS服务器。现在我开始对我的应用程序进行一些操作。现在我想知道我的应用程序在执行操作之前和之后使用的内存。请在这方面支持我
【问题讨论】:
我正在通过部署自己的类来运行JBOSS服务器。现在我开始对我的应用程序进行一些操作。现在我想知道我的应用程序在执行操作之前和之后使用的内存。请在这方面支持我
【问题讨论】:
通过使用 MemoryMXBean (通过调用检索 ManagementFactory.getMemoryMXBean()) 也 Runtime.getRuntime() 的方法: .totalMemory(), .maxMemory() 和 .freeMemory().
请注意,这不是一门精确的艺术:在创建新对象时,可能会分配其他临时对象,这不会为您提供准确的测量结果。众所周知,java 垃圾回收是无法保证的,因此您不一定可以这样做来消除死对象。
如果您进行研究,您会发现大多数尝试进行这些测量的代码都会有 Runtime.gc() 调用和休眠等循环,以尝试确保测量准确。这仅适用于某些 JVM 实现...
在应用服务器/已部署的应用程序上,您可能只会在分配堆和触发 gc 时获得粗略的测量/使用变化,但这应该足够了。 [我假设您不会实现 gc() 并在生产代码中休眠 :)]
【讨论】:
在执行Runtime.getRuntime().freeMemory()操作前获取空闲内存,完成操作后再获取,即可获得操作使用的内存。
【讨论】:
你可能会发现你得到的结果是不确定的。 GC 将在后台随机点清理已使用的内存,因此您可能会发现,如果多次运行相同的操作会得到不同的结果。您甚至可以在执行操作后似乎有更多可用内存。
【讨论】: