文章目錄
-
-
- Runtime類是什麼?
- Runtime類能做什麼
-
- 1.檢視系統記憶體
- 2.調用系統本地程式
- 3.加載動态連結庫
- 4.終止虛拟機
-
Runtime類是什麼?
- 每個java程式在運作時相當于啟動了一個
,每個JVM程序
都對應一個JVM程序
。RunTime執行個體
- RunTime是JVM負責執行個體化的,且使用了
,必須通過RunTime内部的單例設計模式
方法擷取執行個體化對象getRuntime()
【Java基礎】Runtime類使用 - 通過Runtime對象的方法可以
檢視Java虛拟機的狀态以及控制虛拟機的行為。
- System許多函數的使用都是等價于Runtime.getRuntime(),可見System和Runtime之間的聯系是多麼密切,
實際上System是依賴于Runtime類的。
Runtime類能做什麼
1.檢視系統記憶體
上圖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.調用系統本地程式
//通過調用 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();
}
}
Process的主要方法
destroy()//殺掉子程序。
exitValue()//傳回子程序的出口值。
InputStream getErrorStream()//獲得子程序的錯誤流。
InputStream getInputStream()// 獲得子程序的輸入流。
OutputStream getOutputStream()//獲得子程序的輸出流。
waitFor()// 導緻目前線程等待,如果必要,一直要等到由該 Process 對象表示的程序已經終止。
/*一般執行linux指令使用比較多的是waitFor(),諸塞等待子程序完成該linux指令。然後再繼續線程後續的代碼。*/
3.加載動态連結庫
load()可以加載動态連結庫,如linux下的so檔案,win下的dll檔案。
4.終止虛拟機
Runtime.getRuntime().exit(0);//通過啟動JVM關閉指令來終止目前運作的Java虛拟機。
Runtime.getRuntime().halt(0);//此方法強制終止目前運作的Java虛拟機。此方法永遠不會正常傳回。應謹慎使用此方法。