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

请求帮助,java内存使用率
我最近在看一份资料,使用java计算内存使用率的文章

package memory;

import mytools.java.lang.management.ManagementFactory;
import mytools.com.sun.management.OperatingSystemMXBean;

public class memory {
public static void main(String[] args) {
System.out.println(getMemory());
}
/**
 * 获取内存使用率
 * @return
 */
public static String getMemory() {
OperatingSystemMXBean osmxb=(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();

long totalvirtualMemory=osmxb.getTotalSwapSpaceSize();
long freePhysicalMemorySize=osmxb.getFreePhysicalMemorySize();
Double compare=(Double)(1-freePhysicalMemorySize*1.0/totalvirtualMemory)*100;
String str="内存已使用:"+compare.intValue()+"%";
return str;
}

}

在引用里面import mytools.com.sun.management.OperatingSystemMXBean;和import mytools.java.lang.management.ManagementFactory;都找不到,导致其中的两个方法getTotalSwapSpaceSize()和getFreePhysicalMemorySize()都不能用。
mytools是一个java的类库吗?还是什么?我用的是jdk1.6的版本,我在rt.jar里也没找到有这个地方,这个东西需要从哪里去找。

我这里还有个能运行过去的,供参考,用的方法不一样。

package memory;
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;

/**
 * 该方法获取系统内存,物理内存和当前的线程
 * @author Administrator
 *
 */
public class easy {
public static String pt="D:\\abc.txt";
public easy(){

}
public static void main(String[] args) throws Exception{

//获取系统内存
//free和use和total均为kb
long free=0;
long use=0;
long total=0;
int kb=1024;
Runtime rt=Runtime.getRuntime();
total=rt.totalMemory();//系统总内存
free=rt.freeMemory();//系统空闲的内存
use=total-free;//系统已用内存
System.out.println("系统内存已用的空间为:"+use/kb+"MB");
System.out.println("系统内存的空闲空间为:"+free/kb+"MB");
System.out.println("系统总内存空间为:"+total/kb+"MB");

//获取物理内存
//注意:物理内存的取值与系统内存的取值不同,getFreePhysicalMemorySize()为已用的物理内存,违背人的使用习惯
OperatingSystemMXBean osmxb=(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
long physicalFree=osmxb.getFreePhysicalMemorySize()/kb;//已用的物理内存
long physicalTotal=osmxb.getTotalPhysicalMemorySize()/kb;//系统总物理内存
long physicalUse=physicalTotal-physicalFree; //空闲物理内存
String os=System.getProperty("os.name");  //获取操作系统的版本
System.out.println("操作系统的版本:"+os);
System.out.println("系统物理内存已用的空间为:"+physicalFree+"MB");
System.out.println("系统物理内存的空闲空间为:"+physicalUse+"MB");
System.out.println("总物理内存为:"+physicalTotal+"MB");

//获得线程总数
ThreadGroup parentThead;
//没看懂,以后再说
for(parentThead=Thread.currentThread().getThreadGroup();parentThead.getParent()!=null;parentThead=parentThead.getParent());
int totalThread=parentThead.activeCount();
System.out.println("获得线程总数:"+totalThread);
}

}





------解决方案--------------------
我是在这里找到的:http://jeelee.iteye.com/blog/632690,
其实我发现,那个mytools 什么什么的,你可以删除了掉,它实际对应的包是:
import sun.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;