Java常用类库----Runtime类 && Process类

认识Runtime类

  Runtime:运行时,是一个封装了JVM进程的类。每一个Java程序实际上都是启用了一个JVM进程,那么每一个JVM进程都对应这一个Runtime实例,此实例是由JVM为其实例化的。

  本类的定义中根本就没有构造方法,本类的构造方法被私有化了。则在此类中肯定有一个方法可以返回本类的实例化对象。

public static 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()) ;
    }
};
View Code

 

Runtime与Process类

  除了观察内存使用量之外,也可以直接使用Runtime类运行本机的可执行程序,例如,调用记事本

    public Process exec(String command) throws IOException

public class RuntimeDemo02{
    public static void main(String args[]){
        Runtime run = Runtime.getRuntime() ;    // 取得Runtime类的实例化对象
        try{
            run.exec("notepad.exe") ;    // 调用本机程序,此方法需要异常处理
        }catch(Exception e){
            e.printStackTrace() ;    // 打印异常信息
            // System.out.println(e) ;
        }
    }
};
View Code

  以上的程序只是打开了一个记事本,现在要求一个记事本程序在运行5秒之后自动进行关闭。如果要想实现以上的功能,就必须操作进程了。因为每个记事本打开都会存在一个进程。

  exec()方法的返回值是Process,表示一个进程的操作类。可以通过destroy()方法销毁一个进程。

public class RuntimeDemo03{
    public static void main(String args[]){
        Runtime run = Runtime.getRuntime() ;    // 取得Runtime类的实例化对象
        Process p = null ;    // 定义进程变量
        try{
            p = run.exec("notepad.exe") ;    // 调用本机程序,此方法需要异常处理
        }catch(Exception e){
            e.printStackTrace() ;    // 打印异常信息
            // System.out.println(e) ;
        }
        try{
            Thread.sleep(5000) ;    // 让此线程存活5秒
        }catch(Exception e){
        }
        p.destroy() ;    // 结束此进程
    }
};
View Code

 

总结

  Runtime类本身就是单态设计的一种应用,因为在整个JVM中只存在一个Runtime类的对象,可以使用Runtime类取得JVM的系统信息,或者使用gc()方法释放掉垃圾空间,还可以使用此类运行本机的程序。

posted @ 2015-03-26 11:50  闲来垂钓  阅读(247)  评论(0)    收藏  举报