runtime运行时候,是封装了一个JVM进程的类,每一个JAVA程序实际上启动了一个JVM进程,那么每个JVM对应一个runtime实例。此实例是由JVM为其实例化。
本类的定义中没有构造方法,因为本类的方法被私有化了。则此类中肯定有一个方法返回实例化对象(类似单例设计者模式)。
实例化方法:
Runtime run = Runtime.getRuntime(); // 通过Runtime类的静态方法进行实例化操作
一旦取得实例,以上方法就可以进行操作了。
一,得到JVM信息
每一个runtime()都是JVM进行实例化,所以可以直接通过此类取得一些信息。
public class RuntimeDemo01{ public static void main(String args[]){ Runtime run = Runtime.getRuntime(); // 通过Runtime类的静态方法进行实例化操作 System.out.println("JVM最大内存量:" + run.maxMemory()) ; // 观察最大的内存,根据机器的不同,环境也会有所不同 System.out.println("JVM空闲内存量:" + run.freeMemory()) ; // 取得程序运行的空闲内存 String str = "Hello " + "World" + "!!!" +" " + "Welcome " + "To " + "MLDN" + "~" ; System.out.println(str) ; for(int x=0;x<1000;x++){ str += x ; // 循环修改内容,会产生多个垃圾 } System.out.println("操作String之后的,JVM空闲内存量:" + run.freeMemory()) ; run.gc() ; // 进行垃圾收集,释放空间 System.out.println("垃圾回收之后的,JVM空闲内存量:" + run.freeMemory()) ; } };
运行结果:
JVM最大内存量:1394606080 JVM空闲内存量:93386136 Hello World!!! Welcome To MLDN~ 操作String之后的,JVM空闲内存量:87346392 垃圾回收之后的,JVM空闲内存量:93846784
RUNTIME与PROCESS类结合使用
除了观察内存使用量外,也可以直接使用Runtime类运行本机可执行程序,例如,记事本。
。public Process exec(String Command)throws IOException;
可见,本方法需要异常处理。
package Thread1; public class demo1{ public static void main(String args[]){ Runtime run = Runtime.getRuntime() ; // 取得Runtime类的实例化对象 try{ run.exec("eclipse.exe") ; // 调用本机程序,此方法需要异常处理 }catch(Exception e){ e.printStackTrace() ; // 打印异常信息 // System.out.println(e) ; } } };
运行结果:
eclipse程序被调用。
以上程序只是打开了记事本,现在要求记事本在打开5秒之后自动关闭,如果要想操作实现以上功能,就需要操作进程了。因为每一个记事本打开,都是会存在一个进程。
exec()方法的返回值是Process,表示一个进程的操作类。可以通过destroy()方法销毁一个进程。并且通过sleep()方法让线程暂停5秒钟。
package Thread1; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class demo1{ public static void main(String args[]){ Runtime t=Runtime.getRuntime(); Process p=null; // 定义进程变量,注意,这里是声明一个对象,并没有实例化,在下文赋值实例化。 try{ p=t.exec("eclipse.exe"); //exec()方法返回值是Process对象。 调用本机程序,此方法需要异常处理 }catch(IOException e) { e.printStackTrace(); // 打印异常信息 } try{ Thread.sleep(5000); // 让此线程存活5秒 }catch(Exception e) { } p.destroy(); // 结束此进程 } };
运行结果:
会发现,eclipse程序在打开5秒后自动关闭。
总结
Runtime类本身就是一种单例设计的一种应用。因为整个JVM只存在一个Runtime()对象,可以使用Runtime()类取得JVM的系统信息。或者使用gc()释放系统垃圾内存。
还可以使用此类运行本机程序。