2

我知道这个问题很常见,但是我从这个站点检查了一些解决方案,但它似乎对我不起作用。

所以,我写了一个小的java程序,我想知道它在不同的执行时刻消耗了多少内存。我尝试了 Runtime.getRuntime.total() 和 Runtime.getRuntime.free(),但每次都得到(几乎)相同的结果。

我对整个 JVM 有多少可用或使用的内存不感兴趣,我想知道专门针对我的 java 进程。

4

2 回答 2

13

这会让你知道你的进程使用了​​多少堆内存。

MemoryUsage heapMemoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
heapMemoryUsage.getUsed();

您还可以获取所有内存池并遍历它们以确定其他内存使用情况

List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans()

您还可以使用 jvisualvm 来询问您的应用程序。

于 2012-11-27T06:55:36.240 回答
3

我对整个 JVM 有多少可用或使用的内存不感兴趣,我想知道专门针对我的 java 进程。

在典型的用例中,“整个 JVM”和“您的 Java 进程”之间没有真正的区别。至少,不是从内存使用的角度来看。

问题是,JVM 所做的一切,以及它分配的每一点内存都是在应用程序的要求下完成的。并且内存中的每个字都可以访问,因为您的应用程序中的某些东西可能会在某个时候使用它。

所以真的你所要求的并没有多大意义。当然,信息不可用。即使这确实有意义,但我不知道通过了解哪些内存“属于”您的应用程序以及哪些内容属于 JVM,您会获得什么。

于 2012-11-27T07:13:25.220 回答