JMX 获取实时堆内存使用报告常量值
JMX to get live heap memory usage reports constant values
我有一个程序可以监视 JVM 的堆内存使用情况。据我从文档中了解到,系统中只有一个JVM,我们可以使用ManagementFactory.getMemoryBean()来获取JVM的MXbean。但是当我 运行 这个程序随着时间的推移反复出现时,我得到了使用的堆内存的常量值。我有一个 java 程序,它可以循环创建对象并销毁它们。在 JVisualVM 中进行监控时,实时使用情况图表明堆内存使用情况随时间变化,并且由于它 运行 在同一个 JVM 上,这些值不应该也改变吗?
获取内存的代码片段如下:
MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
MemoryUsage mem = memBean.getHeapMemoryUsage();
long heapMax = mem.getMax();
long heapCurrMax = mem.getInit();
long heapUsed = mem.getUsed();
long heapCommitted = mem.getCommitted();
已用内存的输出:
379771840
379771840
379771840
379771840
379771840
379771840
全部相隔 5 秒。
谁能告诉我我做的是错的还是我理解的一开始就错了?
我不知道如何,但相同的代码在反复尝试后开始工作。请post做完后详细分析
我有一个程序可以监视 JVM 的堆内存使用情况。据我从文档中了解到,系统中只有一个JVM,我们可以使用ManagementFactory.getMemoryBean()来获取JVM的MXbean。但是当我 运行 这个程序随着时间的推移反复出现时,我得到了使用的堆内存的常量值。我有一个 java 程序,它可以循环创建对象并销毁它们。在 JVisualVM 中进行监控时,实时使用情况图表明堆内存使用情况随时间变化,并且由于它 运行 在同一个 JVM 上,这些值不应该也改变吗?
获取内存的代码片段如下:
MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
MemoryUsage mem = memBean.getHeapMemoryUsage();
long heapMax = mem.getMax();
long heapCurrMax = mem.getInit();
long heapUsed = mem.getUsed();
long heapCommitted = mem.getCommitted();
已用内存的输出:
379771840
379771840
379771840
379771840
379771840
379771840
全部相隔 5 秒。
谁能告诉我我做的是错的还是我理解的一开始就错了?
我不知道如何,但相同的代码在反复尝试后开始工作。请post做完后详细分析