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