Java Runtime总结

概述

Runtime类封装了运行时的环境。每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。
不能实例化Runtime对象,应用程序也不能创建自己的Runtime类实例,但可以通过getRuntime方法获取当前Runtime运行时对象的引用。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。
Runtime常用的几种方法:runtime.maxMemory(),获取JVM最大内存;runtime.freeMemory(),获取JVM的空闲内存;runtime.gc(),进行垃圾收集,释放空间;runtime.exec(“XXX”),调用本机上的程序;

应用

获得系统内存的一些信息

public void runtime() {
    Runtime runtime = Runtime.getRuntime();
    int processors = runtime.availableProcessors();
    long freeMemory = runtime.freeMemory();
    long maxMemory = runtime.maxMemory();
    long totalMemory = runtime.totalMemory();
    System.out.printf("processors:"+processors+";freeMemory:"+freeMemory+";maxMemory:"+maxMemory+";totalMemory:"+totalMemory);
}

获得java版本(java -version)

public void runtime(){
    try {
        Process process = Runtime.getRuntime().exec("javac -version");
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
        String line = null;
        while ((line = br.readLine()) != null)
            System.out.println(line);
        process.waitFor();
        System.out.println("Process exitValue: " + process.exitValue());
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

执行外部命令

public void runtime(){
try {
    Process process = Runtime.getRuntime().exec("[输入预先准备好的可执行文件]");
    BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = null;
    while ((line = br.readLine()) != null)
        System.out.println(line);
    process.waitFor();
    System.out.println("Process exitValue: " + process.exitValue());
} catch (Throwable t) {
    t.printStackTrace();
}
}

Runtime类导出mysql脚本

public void runtime() throws IOException, InterruptedException{
    String execCommand = "cmd c/ D:/Java/mysqldump.exe -uhuhx -phuhx boot_learn > D:/bootlearn.sql";
    System.out.println("exec command: " + execCommand);
    Runtime runtime = Runtime.getRuntime();
    Process p = runtime.exec(execCommand);
    StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "Error");
    StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "Output");
    errorGobbler.start();
    outputGobbler.start();
    p.waitFor();
    System.out.println("successful." + p.exitValue());
}

清空缓冲区线程代码

public class StreamGobbler extends Thread {

    InputStream is;
    String type;

    public StreamGobbler(InputStream is, String type) {
        this.is = is;
        this.type = type;
    }

    public void run() {
        try (InputStreamReader isr = new InputStreamReader(is);) {
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                if (type.equals("Error")) {
                    System.out.println("Error   :" + line);
                } else {
                    System.out.println("Debug:" + line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Process实例,用于操作进程
public static void main(String[] args) {
    Process notepad = null; //创建一个Process的实例,用于接受exec()返回的进程。
    try {
        notepad = Runtime.getRuntime().exec("notepad.exe");//接受返回的进程
        Thread.sleep(5000);//休眠5s
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    notepad.destroy();    //结束notepad进程。
}
参考资料

Java中Runtime类
Runtime应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值