天天看點

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應用