Java常用类库——Runtime

  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" + "!!!" 
                +"\t" + "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()释放系统垃圾内存。

还可以使用此类运行本机程序。

 

  

posted @ 2016-08-07 13:27  美好的明天  阅读(657)  评论(0编辑  收藏  举报