Java jconsole显示的堆使用率和应用程序计算的使用率百分比不匹配
我们运行一个JVM应用程序,它有46 GB的堆内存(44GB旧内存+2GB年轻内存) 我们使用jconsole连接到jvm进程 在应用程序中,我们根据以下代码计算已使用内存的百分比Java jconsole显示的堆使用率和应用程序计算的使用率百分比不匹配,java,memory,garbage-collection,jvm,jconsole,Java,Memory,Garbage Collection,Jvm,Jconsole,我们运行一个JVM应用程序,它有46 GB的堆内存(44GB旧内存+2GB年轻内存) 我们使用jconsole连接到jvm进程 在应用程序中,我们根据以下代码计算已使用内存的百分比 Runtime runtime = Runtime.getRuntime(); return Math.round( 100 * ( runtime.totalMemory() - runtime.freeMemory() ) / runtime.getMaxMemory() ); 当jconsole显示内存使用量
Runtime runtime = Runtime.getRuntime();
return Math.round( 100 * ( runtime.totalMemory() - runtime.freeMemory() ) / runtime.getMaxMemory() );
当jconsole显示内存使用量为39 GB时,上述代码段给出的值仅为77%,即(0.77*46)35.5 GB
为什么存在不匹配,我如何关联它们?我错过什么了吗?
我需要找到使用率%,以便在我们的应用程序中触发一些操作。一些查询:(a)哪个Java版本?(b) 您如何确保应用程序可用内存计算和jconsole内存报告都在同一时间完成?很抱歉回复太晚,但我还是很清楚。下面是给你的答案a)Java 7 b)我可以通过jconsole实时监控,从我们打印统计数据的应用程序中——我已经观察到了这一点,其中包含大量的静态数据。