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(); } }