在Java中获取内存统计信息:运行时与MemoryMXBean

在Java中获取内存统计信息:运行时与MemoryMXBean,java,memory-profiling,Java,Memory Profiling,我正在创建一个计划执行器来读取JVM的内存使用情况。我遇到了两种在运行的JVM中获取内存统计信息的方法—Runtime和MemoryMXBean,它们的方法之间有以下对应关系: memoryMxBean.getHeapMemoryUsage().getUsed() <=> runtime.totalMemory() - runtime.freeMemory() memoryMxBean.getHeapMemoryUsage().getCommitted() <=>

我正在创建一个计划执行器来读取JVM的内存使用情况。我遇到了两种在运行的JVM中获取内存统计信息的方法—Runtime和MemoryMXBean,它们的方法之间有以下对应关系:

memoryMxBean.getHeapMemoryUsage().getUsed()      <=> runtime.totalMemory() - runtime.freeMemory()
memoryMxBean.getHeapMemoryUsage().getCommitted() <=> runtime.totalMemory()
memoryMxBean.getHeapMemoryUsage().getMax()       <=> runtime.maxMemory()
memoryMxBean.getHeapMemoryUsage().getUsed()runtime.totalMemory()-runtime.freeMemory()
memoryMxBean.getHeapMemoryUsage().getCommitted()运行时。totalMemory()
memoryMxBean.getHeapMemoryUsage().getMax()运行时

除了MemoryMXBean提供的其他非堆内存使用信息之外,我是否有理由更喜欢它而不是运行时,或者反之亦然?

没有。JMXbean可以从外部访问,用于管理工具,如
hyperic(甚至nagios)——它无论如何都会委托给运行时

对。这两种方法返回的已用内存值完全相同。