Java中的Runtime类

Runtime类:是封装JVM进程的类。每个Java程序运行的时候,JVM会自动为其创建一个JVM进程用来记录当前程序运行时的环境并将其封装在Runtime类的实例中。应用程序可以通过该实例了解程序运行时的一些信息,如可用处理器的数目、最大内存量、可用内存量等。

一、查看内存信息:

public static void main(String[] args) {
	Runtime run= Runtime.getRuntime();//单例模式,实例化对象
	//availableProcessors:向 Java 虚拟机返回可用处理器的数目。
	System.out.println("可用处理器的数目:"+run.availableProcessors());//4
		
	//totalMemory():返回 Java 虚拟机中的内存总量。此方法返回的值可能随时间的推移而变化,这取决于主机环境。
	System.out.println("当前JVM的内存总量:"+run.totalMemory());//1065484288
		
	//maxMemory():返回 Java 虚拟机试图使用的最大内存量。如果内存本身没有限制,则返回值 Long.MAX_VALUE。
	//Long.MAX_VALUE:保持 long 类型的最大值的常量,该值为 (2e63)-1。
	System.out.println("当前JVM的最大内存量:"+run.maxMemory());//1065484288
		
	//freeMemory():返回 Java 虚拟机中的空闲内存量。调用 gc 方法可能导致 freeMemory 返回值的增加。
	long freeM1 = run.freeMemory();
	System.out.println("当前JVM的空闲内存量:"+freeM1);//1064163064
		
	//通过String循环操作消耗内存
	String str="";
	for(int i=0;i<10000;i++){
		str+=i;
	}
	long freeM2 = run.freeMemory();
	System.out.println("String循环之后JVM的空闲内存量:"+freeM2);//1028886392
	System.out.println("String循环消耗的内存量:"+(freeM1-freeM2));//35276672
		
	//通过StringBuffer循环操作消耗内存量
	StringBuffer strBuf = new StringBuffer("");
	for(int i=0;i<10000;i++){
		strBuf.append(i);
	}
	long freeM3 = run.freeMemory();
	System.out.println("StringBuffer循环之后JVM的空闲内存量:"+freeM3);//1028628320
	System.out.println("StringBuffer循环消耗的内存量:"+(freeM2-freeM3));//258072
	
	//outout:35018600
	System.out.println("String循环比StringBuffer循环多消耗内存量:"+((freeM1-freeM2)-(freeM2-freeM3)));
	//进行垃圾回收
	run.gc();
	System.out.println("垃圾回收之后的内存量:"+run.freeMemory());//1064789304
}

二、执行操作系统的命令:
如打开记事本,5秒以后自动关闭记事本。
执行命令调用Runtime的exec方法,API中的说明如下:
public Process exec(String command) throws IOException:在单独的进程中执行指定的字符串命令。
自动关闭记事本主要用process.destroy()结束进程。

public static void main(String[] args) {
	Runtime run= Runtime.getRuntime();//单例模式,实例化对象
	try{
		Process process = run.exec("notepad.exe");//执行命令并记录使用此命令开启的进程信息
		Thread.sleep(10000);//休眠5秒
		process.destroy();//结束进程
		//exitValue:返回子进程的出口值。 
		//返回:此 Process 对象表示的子进程的出口值。
		//根据惯例,值 0 表示正常终止,如点击记事本关闭按钮进行关闭。
		//值1表示非正常终止,如通过手动结束进程或调用process.destroy()的方法。
		System.out.println(process.exitValue());
	}catch(Exception e){
		e.printStackTrace();
	}
}

猜你喜欢

转载自1017401036.iteye.com/blog/2285928