zoukankan      html  css  js  c++  java
  • 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" + "!!!" 
                    +"	" + "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()释放系统垃圾内存。

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

      

  • 相关阅读:
    BZOJ 1050 旅行
    BZOJ 1040 骑士
    BZOJ 1038 瞭望塔
    BZOJ 1037 生日聚会
    BZOJ 1823 满汉全席
    BZOJ 3091 城市旅行
    CF702E Analysis of Pathes in Functional Graph
    Luogu 2154 [SDOI2009]虔诚的墓主人
    Luogu 1268 树的重量
    Luogu 4867 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/alsf/p/5745141.html
Copyright © 2011-2022 走看看