天天看點

【Java基礎】Runtime類使用

文章目錄

      • Runtime類是什麼?
      • Runtime類能做什麼
        • 1.檢視系統記憶體
        • 2.調用系統本地程式
        • 3.加載動态連結庫
        • 4.終止虛拟機

Runtime類是什麼?

  1. 每個java程式在運作時相當于啟動了一個

    JVM程序

    ,每個

    JVM程序

    都對應一個

    RunTime執行個體

  2. RunTime是JVM負責執行個體化的,且使用了

    單例設計模式

    ,必須通過RunTime内部的

    getRuntime()

    方法擷取執行個體化對象
    【Java基礎】Runtime類使用
  3. 通過Runtime對象的方法可以

    檢視Java虛拟機的狀态以及控制虛拟機的行為。

  4. System許多函數的使用都是等價于Runtime.getRuntime(),可見System和Runtime之間的聯系是多麼密切,

    實際上System是依賴于Runtime類的。

Runtime類能做什麼

1.檢視系統記憶體

【Java基礎】Runtime類使用

上圖4個native方法,分别傳回JVM核心數、空閑記憶體、總記憶體、最大記憶體

@Test
public void runtimeInfo() {
    Runtime runtime = Runtime.getRuntime();
    int processors = runtime.availableProcessors();//法傳回JVM(Java虛拟機)可用的處理器數。
    long freeMemory = runtime.freeMemory();//傳回JVM(Java虛拟機)中的可用記憶體量
    long maxMemory = runtime.maxMemory();//傳回JVM(Java虛拟機)中的總記憶體量
    long totalMemory = runtime.totalMemory();//傳回Java虛拟機将嘗試使用的最大記憶體量。如果沒有固有限制,則傳回值Long.MAX_VALUE。

    // processors=4, freeMemory=165713400, maxMemory=2837446656, totalMemory=192937984
    logger.debug("processors={}, freeMemory={}, maxMemory={}, totalMemory={}", processors, freeMemory, maxMemory, totalMemory);
}
           

2.調用系統本地程式

【Java基礎】Runtime類使用
//通過調用 javac -version 擷取JDK版本資訊
 @Test
    public void getJavaVersion() {
        try {
            Process process = Runtime.getRuntime().exec("java -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()); //0
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
           
【Java基礎】Runtime類使用

Process的主要方法

destroy()//殺掉子程序。

exitValue()//傳回子程序的出口值。

InputStream getErrorStream()//獲得子程序的錯誤流。

InputStream getInputStream()// 獲得子程序的輸入流。

OutputStream getOutputStream()//獲得子程序的輸出流。

waitFor()// 導緻目前線程等待,如果必要,一直要等到由該 Process 對象表示的程序已經終止。
/*一般執行linux指令使用比較多的是waitFor(),諸塞等待子程序完成該linux指令。然後再繼續線程後續的代碼。*/
           

3.加載動态連結庫

load()可以加載動态連結庫,如linux下的so檔案,win下的dll檔案。

【Java基礎】Runtime類使用

4.終止虛拟機

Runtime.getRuntime().exit(0);//通過啟動JVM關閉指令來終止目前運作的Java虛拟機。
Runtime.getRuntime().halt(0);//此方法強制終止目前運作的Java虛拟機。此方法永遠不會正常傳回。應謹慎使用此方法。
           

繼續閱讀