使用Java获取内存统计信息:Runtime vs. MemoryMXBean

9 java memory-profiling

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

memoryMxBean.getHeapMemoryUsage().getUsed()      <=> runtime.totalMemory() - runtime.freeMemory()
memoryMxBean.getHeapMemoryUsage().getCommitted() <=> runtime.totalMemory()
memoryMxBean.getHeapMemoryUsage().getMax()       <=> runtime.maxMemory()
Run Code Online (Sandbox Code Playgroud)

除了MemoryMXBean提供的额外非堆内存使用信息之外,有什么理由可以让我更喜欢它而不是运行时,反之亦然?

Kon*_*uda 5

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