天天看點

java中Runtime類

一、概述

      Runtime類封裝了運作時的環境。每個 Java 應用程式都有一個 Runtime 類執行個體,使應用程式能夠與其運作的環境相連接配接。

      一般不能執行個體化一個Runtime對象,應用程式也不能建立自己的 Runtime 類執行個體,但可以通過 getRuntime 方法擷取目前Runtime運作時對象的引用。

      一旦得到了一個目前的Runtime對象的引用,就可以調用Runtime對象的方法去控制Java虛拟機的狀态和行為。 

      當Applet和其他不被信任的代碼調用任何Runtime方法時,常常會引起SecurityException異常。

二、API預覽

 addShutdownHook(Thread hook) 

      注冊新的虛拟機來關閉挂鈎。 

    availableProcessors() 

      向 Java 虛拟機傳回可用處理器的數目。 

    exec(String command) 

      在單獨的程序中執行指定的字元串指令。 

    exec(String[] cmdarray) 

      在單獨的程序中執行指定指令和變量。 

    exec(String[] cmdarray, String[] envp) 

      在指定環境的獨立程序中執行指定指令和變量。 

    exec(String[] cmdarray, String[] envp, File dir) 

      在指定環境和工作目錄的獨立程序中執行指定的指令和變量。 

    exec(String command, String[] envp) 

      在指定環境的單獨程序中執行指定的字元串指令。 

    exec(String command, String[] envp, File dir) 

      在有指定環境和工作目錄的獨立程序中執行指定的字元串指令。 

    exit(int status) 

      通過啟動虛拟機的關閉序列,終止目前正在運作的 Java 虛拟機。 

    freeMemory() 

      傳回 Java 虛拟機中的空閑記憶體量。 

    gc() 

      運作垃圾回收器。 

    InputStream getLocalizedInputStream(InputStream in) 

      已過時。 從 JDK 1.1 開始,将本地編碼位元組流轉換為 Unicode 字元流的首選方法是使用 InputStreamReader 和 BufferedReader 類。 

    OutputStream getLocalizedOutputStream(OutputStream out) 

      已過時。 從 JDK 1.1 開始,将 Unicode 字元流轉換為本地編碼位元組流的首選方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 類。 

    getRuntime() 

      傳回與目前 Java 應用程式相關的運作時對象。 

    halt(int status) 

      強行終止目前正在運作的 Java 虛拟機。 

    load(String filename) 

      加載作為動态庫的指定檔案名。 

    loadLibrary(String libname) 

      加載具有指定庫名的動态庫。 

    maxMemory() 

      傳回 Java 虛拟機試圖使用的最大記憶體量。 

    removeShutdownHook(Thread hook) 

      取消注冊某個先前已注冊的虛拟機關閉挂鈎。 

    runFinalization() 

      運作挂起 finalization 的所有對象的終止方法。 

    runFinalizersOnExit(value) 

      已過時。 此方法本身具有不安全性。它可能對正在使用的對象調用終結方法,而其他線程正在操作這些對象,進而導緻不正确的行為或死鎖。 

    totalMemory() 

      傳回 Java 虛拟機中的記憶體總量。 

    traceInstructions(on) 

      啟用/禁用指令跟蹤。 

    traceMethodCalls(on) 

      啟用/禁用方法調用跟蹤。

三、常見的應用

1、API簡單應用

2、記憶體管理

Java提供了無用單元自動收集機制。通過totalMemory()和freeMemory()方法可以知道對象的堆記憶體有多大,還剩多少。

Java會周期性的回收垃圾對象(未使用的對象),以便釋放記憶體空間。但是如果想先于收集器的下一次指定周期來收集廢棄的對象,可以通過調用gc()方法來根據需要運作無用單元收集器。一個很好的試驗方法是先調用gc()方法,然後調用freeMemory()方法來檢視基本的記憶體使用情況,接着執行代碼,然後再次調用freeMemory()方法看看配置設定了多少記憶體。下面的程式示範了這個構想。

運作結果:(不同的機器不同時間運作的結果也不一定一樣):

java中Runtime類

3、執行其他程式

在安全的環境中,可以在多任務作業系統中使用Java去執行其他特别大的程序(也就是程式)。ecec()方法有幾種形式命名想要運作的程式和它的輸入參數。ecec()方法傳回一個Process對象,可以使用這個對象控制Java程式與新運作的程序進行互動。ecec()方法本質是依賴于環境。

下面的例子是使用ecec()方法啟動windows的記事本notepad。這個例子必須在Windows作業系統上運作。

  exec()還有其他幾種形式,例子中示範的是最常用的一種。ecec()方法傳回Process對象後,在新程式開始運作後就可以使用Process的方法了。可以用destory()方法殺死子程序,也可以使用waitFor()方法等待程式直到子程式結束,exitValue()方法傳回子程序結束時傳回的值。如果沒有錯誤,将傳回0,否則傳回非0。

  下面是關于ecec()方法的例子的改進版本。例子被修改為等待,直到運作的程序退出:

運作結果:(當關閉記事本後,會接着運作程式,列印資訊)

java中Runtime類

當子程序正在運作時,可以對标準輸入輸出進行讀寫。getOutputStream()方法和getInPutStream()方法傳回對子程序的标準輸入和輸出。