日期:2014-05-20  浏览次数:20814 次

做一个内存监测的程序,遇到一个问题,请教高人
//   Get   memory   pools.
static   java.util.List <MemoryPoolMXBean>   mpools   =   ManagementFactory
.getMemoryPoolMXBeans();

//   Total   number   of   memory   pools.
static   int   numPools   =   mpools.size();


/**
  *   Returns   maximum   memory   available   in   the   system.
  */
public   static   float   getMaxMem(int   npool)
{
MemoryPoolMXBean   mp   =   mpools.get(npool);--------这里报错
float   totalMemory   =   mp.getUsage().getMax();
return   totalMemory;
}

/**
  *   Returns   current   used   memory   in   the   system.
  */
public   static   float   getUsedMemory(int   npool)
{
MemoryPoolMXBean   mp   =   mpools.get(npool);--------这里报错
float   usedMemory   =   mp.getUsage().getUsed();
return   usedMemory;
};


有高人知道是什么问题吗?

------解决方案--------------------
mpools.get(npool);--------这里报错 // 应该没有这个方法的

你的程序得到了应该是Java 虚拟机管理的内存,并不是实际的物理内存量


getMemoryPoolMXBeans()
返回 Java 虚拟机中的 MemoryPoolMXBean 对象列表。


public interface MemoryPoolMXBean内存池的管理接口。内存池表示由 Java 虚拟机管理的内存资源,由一个或多个内存管理器对内存池进行管理。

Java 虚拟机具有此接口的实现类的一个或多个实例。实现此接口的实例是 MXBean,可以通过调用 ManagementFactory.getMemoryPoolMXBeans() 方法或从平台 MBeanServer 方法获得。

在 MBeanServer 中惟一标识内存池的 MXBean 的 ObjectName 为:

java.lang:type=MemoryPool,name=pool 's name



------解决方案--------------------
编译报错还是运行报错?
------解决方案--------------------
学习中