import java.io.*;
class RuntimeTest{
	public static void print(String pattern, Object ... obj){
		System.out.printf(pattern,obj);
		System.out.println();
	}
    public static void main(String args[]){
        Runtime r = Runtime.getRuntime();
        long free;

		/*为JVM分配的可使用的最大内存,可以通过如下参数为JVM分配物理内存:
		 -Xmx    Java Heap最大值
		 -Xms    Java Heap初始值
		 -Xmn    Java Heap Young区大小，
		 -Xss    每个线程的Stack大小
		例如：java -Xmx600m -Xms500m -Xmn300m RuntimeTest
		示例了为运行RuntimeTest程序启动的JVM分配的物理内存.*/
        print("总内存数=%d",r.totalMemory());
        free = r.freeMemory();
        print("初始空闲内存=%d", free);
        r.gc();//显式执行垃圾回收
		free = r.freeMemory();
		print("回收垃圾后的空闲内存数量=%d", free);

		Process p = null;	
		try{
			//运行操作系统中的可执行文件
			p = r.exec("notepad");//也可以写为"notepad.exe"
			p.waitFor();
		} catch (Exception e) {
			print(e.getMessage());
		}

		//关闭notepad程序后执行该行
		print("Notepad 返回 %s", p.exitValue());
		
		BufferedReader bf=null;
		try{
			//运行操作系统可执行文件cmd.exe中的命令dir
			//当然dir可以被替换为其他的命令，如mkdir等
			p=r.exec("cmd /c dir");//执行cmd中的dir命令

			bf = new BufferedReader(
					new InputStreamReader(p.getInputStream()));
			String line=null;
			while ((line = bf.readLine()) != null) {
				print(line);//输出 dir 命令显示的内容
			}

		} catch (Exception e){
			print(e.getMessage());
		}finally{
			if(bf!=null){
				try{
					bf.close();
				}catch(IOException e){
					print(e.getMessage());
				}
			}
		}
	}
} 

