2012-10-01 56 views
0

我在写一些监控代码,以跟踪我的应用程序中使用过的内存。我发现了MemoryMXBean,它允许我调查内存使用情况。但我不能得到真正持有的最大值,从documentationMemoryUsage最大变化时间

最大:表示可以用于内存管理的最大内存量(以字节为单位)。它的值可能是未定义的。如果定义,最大内存量可能随时间而改变。

在什么情况下可以最大值为空?即使我没有在启动时明确地设置它,我也认为它会一直设置。如果我设置它,最大值如何随时间变化?有一些相关的thread,但没有回答这个问题。

有人能把光线带入黑暗吗?

回答

1

我不知道什么时候最大内存使用量可以为空,但我可以告诉它随着时间的推移如何变化。最大值表示程序在其生命周期中曾经使用过的最大内存,以JVM的参数Xmx为上限。

所以,当你的程序启动(与Xmx说1G),最大可能是256米。随着程序运行并需要更多内存,JVM将为其提供更多内存,并且最大值将增加,例如512m。现在程序已经完成处理并且所需的内存下降,GC开始并回收内存。但最大值保持在512米。

最大永远不会去上面什么由Xmx参数指定。如果它达到极限(在这种情况下为1g),它将保持在该值直到程序运行结束。

+0

嗯,我对此表示怀疑。你从哪里得到这些信息,你能指点我吗?你的解释不符合前面提到的线程,它的堆的最大值减少了。您是否参考了具有峰值信息的MemoryPoolMXBean? – philnate