我知道这个问题经常出现,但是我从这个网站查了一些解决方案,但似乎它对我不起作用。
所以,我编写了一个小的java程序,我想知道它在不同的执行时刻消耗了多少内存。我尝试了Runtime.getRuntime.total()和Runtime.getRuntime.free(),但每次都得到(几乎)相同的结果。
我对整个JVM可用或使用了多少内存不感兴趣,我想专门知道我的java进程。
答案 0 :(得分:10)
这将获得您的进程使用了多少堆内存。
MemoryUsage heapMemoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
heapMemoryUsage.getUsed();
您还可以获取所有内存池并迭代它们以确定其他内存使用情况
List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans()
您也可以使用jvisualvm来查询您的申请。
答案 1 :(得分:3)
我对整个JVM可用或使用了多少内存不感兴趣,我想专门知道我的java进程。
在典型的用例中,“整个JVM”和“您的Java进程”之间没有真正的区别。至少,不是从内存使用的角度来看。
问题是,JVM所做的一切,以及它分配的每一块内存都是在应用程序的要求下完成的。并且每个内存字仍然可以访问,因为应用程序中的某些内容可能在某些时候使用它。
所以你要求的确实没有多大意义。当然,这些信息不可用。即使这确实有意义,我也不知道通过了解应用程序的“内容”以及JVM的内容会获得什么。