如何在java中获取java进程使用的内存

时间:2009-01-30 04:09:27

标签: java memory

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

3 个答案:

答案 0 :(得分:5)

使用MemoryMXBean(通过调用ManagementFactory.getMemoryMXBean()检索 以及[Runtime.getRuntime()](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#getRuntime())的方法[.totalMemory()](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#totalMemory()),[。maxMemory()](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#maxMemory())和[.freeMemory() ](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#freeMemory())

请注意,这不是一个确切的技术:在创建新对象时,可能会分配其他临时对象,这不会为您提供准确的测量。我们知道,java垃圾收集不能保证,所以你不一定能做到这一点来消除死对象。

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

在应用服务器/部署的应用程序中,您可能只会在分配堆并且gc触发时获得总测量/使用量更改,但它应该足够了。 [我假设您不会实现gc()并在生产代码中睡觉:)]

答案 1 :(得分:2)

在执行Runtime.getRuntime()。freeMemory()之前获取可用内存,然后在完成操作后再次获取可用内存,您将获得操作使用的内存。

答案 2 :(得分:0)

您可能会发现您获得的结果尚无定论。 GC将在后台的随机点清理已用内存,因此您可能会发现,如果您多次运行相同的操作,您将获得不同的结果。执行操作后,您甚至可以看到更多无内存。