JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 Runtime

java.lang.Object
  繼承者 java.lang.Runtime

public class Runtime
extends Object

每個 Java 應用程序都有一個 Runtime 類別實例,使應用程序能夠與其運行的環境相連接。可以通過 getRuntime 方法獲取當前運行時。

應用程序不能創建自己的 Runtime 類別實例。

從以下版本開始:
JDK1.0
另請參見:
getRuntime()

方法摘要
 void addShutdownHook(Thread hook)
          註冊新的虛擬機器來關閉鉤子。
 int availableProcessors()
          向 Java 虛擬機器返回可用處理器的數目。
 Process exec(String command)
          在單獨的進程中執行指定的字元串命令。
 Process exec(String[] cmdarray)
          在單獨的進程中執行指定命令和變數。
 Process exec(String[] cmdarray, String[] envp)
          在指定環境的獨立進程中執行指定命令和變數。
 Process exec(String[] cmdarray, String[] envp, File dir)
          在指定環境和工作目錄的獨立進程中執行指定的命令和變數。
 Process exec(String command, String[] envp)
          在指定環境的單獨進程中執行指定的字元串命令。
 Process exec(String command, String[] envp, File dir)
          在有指定環境和工作目錄的獨立進程中執行指定的字元串命令。
 void exit(int status)
          通過啟動虛擬機器的關閉序列,終止當前正在運行的 Java 虛擬機器。
 long freeMemory()
          返回 Java 虛擬機器中的空閒記憶體量。
 void gc()
          運行垃圾回收器。
 InputStream getLocalizedInputStream(InputStream in)
          已過時。 從 JDK 1.1 開始,將本地編碼位元組串流轉換為 Unicode 字元串流的首選方法是使用 InputStreamReaderBufferedReader 類別。
 OutputStream getLocalizedOutputStream(OutputStream out)
          已過時。 從 JDK 1.1 開始,將 Unicode 字元串流轉換為本地編碼位元組串流的首選方法是使用 OutputStreamWriterBufferedWriterPrintWriter 類別。
static Runtime getRuntime()
          返回與當前 Java 應用程序相關的運行時物件。
 void halt(int status)
          強行終止目前正在運行的 Java 虛擬機器。
 void load(String filename)
          載入作為動態資源庫的指定檔案名。
 void loadLibrary(String libname)
          載入具有指定資源庫名的動態資源庫。
 long maxMemory()
          返回 Java 虛擬機器試圖使用的最大記憶體量。
 boolean removeShutdownHook(Thread hook)
          取消註冊某個先前已註冊的虛擬機器關閉鉤子。
 void runFinalization()
          運行掛起 finalization 的所有物件的終止方法。
static void runFinalizersOnExit(boolean value)
          已過時。 此方法本身具有不安全性。它可能對正在使用的物件調用終結方法,而其他執行緒正在操作這些物件,從而導致不正確的行為或死鎖。
 long totalMemory()
          返回 Java 虛擬機器中的記憶體總量。
 void traceInstructions(boolean on)
          啟用/禁用指令追蹤。
 void traceMethodCalls(boolean on)
          啟用/禁用方法調用追蹤。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法詳細資訊

getRuntime

public static Runtime getRuntime()
返回與當前 Java 應用程序相關的運行時物件。Runtime 類別的大多數方法是實例方法,並且必須根據當前的運行時物件對其進行調用。

返回:
與當前 Java 應用程序相關的 Runtime 物件。

exit

public void exit(int status)
通過啟動虛擬機器的關閉序列,終止當前正在運行的 Java 虛擬機器。此方法從不正常返回。可以將變數作為一個狀態碼;根據慣例,非零的狀態碼表示非正常終止。

虛擬機器的關閉序列包含兩個階段。在第一個階段中,會以某種未指定的順序啟動所有已註冊的關閉鉤子 (hook)(如果有的話),並且允許它們同時運行直至結束。在第二個階段中,如果已啟用退出終結,則運行所有未調用的終結方法。一旦完成這個階段,虛擬機器就會暫停

如果在虛擬機器已開始其關閉序列後才調用此方法,那麼若正在運行關閉鉤子,則將無限期地阻斷此方法。如果已經運行完關閉鉤子,並且已啟用退出終結 (on-exit finalization),那麼此方法將利用給定的狀態碼(如果狀態碼是非零值)暫停虛擬機器;否則將無限期地阻斷虛擬機器。

System.exit 方法是調用此方法的一種傳統而便捷的方式。

參數:
status - 終止狀態。按照慣例,非零的狀態碼表明非正常終止。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExit 方法不允許存在指定的狀態
另請參見:
SecurityException, SecurityManager.checkExit(int), addShutdownHook(java.lang.Thread), removeShutdownHook(java.lang.Thread), runFinalizersOnExit(boolean), halt(int)

addShutdownHook

public void addShutdownHook(Thread hook)
註冊新的虛擬機器來關閉鉤子。

Java 虛擬機器會為了回應以下兩類別事件而關閉

關閉鉤子 只是一個已初始化但尚未啟動的執行緒。虛擬機器開始啟用其關閉序列時,它會以某種未指定的順序啟動所有已註冊的關閉鉤子,並讓它們同時運行。運行完所有的鉤子後,如果已啟用退出終結,那麼虛擬機器接著會運行所有未調用的終結方法。最後,虛擬機器會暫停。注意,關閉序列期間會繼續運行守護執行緒,如果通過調用 exit 方法來發起關閉序列,那麼也會繼續運行非守護執行緒。

一旦開始了關閉序列,則只能通過調用 halt 方法來停止這個序列,此方法可強行終止虛擬機器。

一旦開始了關閉序列,則不可能註冊新的關閉鉤子或取消註冊先前已註冊的鉤子。嘗試執行這些操作會導致拋出 IllegalStateException

關閉鉤子可在虛擬機器生命週期中的特定時間運行,因此應保護性地對其進行編碼。特別是應將關閉鉤子編寫為執行緒安全的,並盡可能地避免死鎖。關閉鉤子還應該不盲目地依靠某些服務,這些服務可能已註冊了自己的關閉鉤子,所以其本身可能正處於關閉進程中。例如,試圖使用其他基於執行緒的服務(如 AWT 事件指派執行緒)可能導致死鎖。

關閉鉤子應該快速地完成其工作。當程序調用 exit 時,虛擬機器應該迅速地關閉並退出。由於使用者註銷或系統關閉而終止虛擬機器時,底層的作業系統可能只允許在固定的時間內關閉並退出。因此在關閉鉤子中嘗試進行任何使用者交互或執行長時間的計算都是不明智的。

與其他所有執行緒一樣,通過調用執行緒 ThreadGroup 物件的 uncaughtException 方法,可在關閉鉤子中處理未捕獲的異常。此方法的預設實作是將該異常的堆疊(stack)空間追蹤列印至 System.err 並終止執行緒;它不會導致虛擬機器退出或暫停。

僅在很少的情況下,虛擬機器可能會中止,也就是沒有完全關閉就停止運行。虛擬機器被外部終止時會出現這種現象,比如在 Unix 上使用 SIGKILL 信號或者在 Microsoft Windows 上調用 TerminateProcess。如果由於內部資料結構損壞或試圖存取不存在的記憶體而導致本機方法執行錯誤,那麼可能也會中止虛擬機器。如果虛擬機器中止,則無法保證是否將運行關閉鉤子。

參數:
hook - 一個已初始化但尚未啟動的 Thread 物件
拋出:
IllegalArgumentException - 如果指定的鉤子已註冊,或者可以確定鉤子正在運行或者已運行完畢
IllegalStateException - 如果虛擬機器已經處於關閉進程中
SecurityException - 如果安全管理器存在並且拒絕 RuntimePermission("shutdownHooks")
從以下版本開始:
1.3
另請參見:
removeShutdownHook(java.lang.Thread), halt(int), exit(int)

removeShutdownHook

public boolean removeShutdownHook(Thread hook)
取消註冊某個先前已註冊的虛擬機器關閉鉤子。

參數:
hook - 要刪除的鉤子
返回:
如果指定的鉤子先前已註冊並且成功地取消註冊,則返回 true,其他情況返回 false
拋出:
IllegalStateException - 如果虛擬機器已經處於關閉進程中
SecurityException - 如果安全管理器存在並且拒絕 RuntimePermission("shutdownHooks")
從以下版本開始:
1.3
另請參見:
addShutdownHook(java.lang.Thread), exit(int)

halt

public void halt(int status)
強行終止目前正在運行的 Java 虛擬機器。此方法從不正常返回。

應小心使用此方法。與 exit 方法不同,此方法不會啟動關閉鉤子,並且如果已啟用退出終結,此方法也不會運行未調用的終結方法。如果已經發起關閉序列,那麼此方法不會等待所有正在運行的關閉鉤子或終結方法完成其工作。

參數:
status - 終止狀態。按照慣例,非零的狀態碼表明非正常終止。如果已經調用了 exitSystem.exit 也一樣)方法,那麼該狀態碼將覆寫已傳遞至此方法的狀態碼。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExit 方法不允許具有指定狀態時退出
從以下版本開始:
1.3
另請參見:
exit(int), addShutdownHook(java.lang.Thread), removeShutdownHook(java.lang.Thread)

runFinalizersOnExit

@Deprecated
public static void runFinalizersOnExit(boolean value)
已過時。 此方法本身具有不安全性。它可能對正在使用的物件調用終結方法,而其他執行緒正在操作這些物件,從而導致不正確的行為或死鎖。

在退出時啟用或禁用終結;這樣做可指定擁有未被自動調用終結方法的所有物件的終結方法,並將在退出 Java 運行時前運行此終結方法。預設情況下,禁用退出終結。

如果有安全管理器,則首先使用 0 作為變數來調用其 checkExit 方法,以確保允許退出。這可能會導致 SecurityException。

參數:
value - 如果啟用退出時終結,則該參數為 true,如果禁用退出時終結,則該參數為 false
拋出:
SecurityException - 如果安全管理器存在並且其 checkExit 方法不允許退出。
從以下版本開始:
JDK1.1
另請參見:
exit(int), gc(), SecurityManager.checkExit(int)

exec

public Process exec(String command)
             throws IOException
在單獨的進程中執行指定的字元串命令。

這是一個很有用的方法。對於 exec(command) 形式的調用而言,其行為與調用 exec(command, null, null) 完全相同。

參數:
command - 一條指定的系統命令。
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 commandnull
IllegalArgumentException - 如果 command 為空
另請參見:
exec(String[], String[], File), ProcessBuilder

exec

public Process exec(String command,
                    String[] envp)
             throws IOException
在指定環境的單獨進程中執行指定的字元串命令。

這是一個很有用的方法。對於 exec(command, envp) 形式的調用而言,其行為與調用 exec(command, envp, null) 完全相同。

參數:
command - 一條指定的系統命令。
envp - 字元串陣列,其中每個元素的環境變數的設置格式為 name=value;如果子進程應該繼承當前進程的環境,或該參數為 null
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 commandnull,或 envp 的元素之一為 null
IllegalArgumentException - 如果 command 為空
另請參見:
exec(String[], String[], File), ProcessBuilder

exec

public Process exec(String command,
                    String[] envp,
                    File dir)
             throws IOException
在有指定環境和工作目錄的獨立進程中執行指定的字元串命令。

這是一個很有用的方法。對於 exec(command, envp, dir) 形式的調用而言,其行為與調用 exec(cmdarray, envp, dir) 完全相同,其中 cmdarraycommand 中所有標記的陣列。

更準確地說,可以使用通過調用 new StringTokenizer(command) 創建的 StringTokenizercommand 字元串拆解成標記,調用時不對字元類別別做進一步的修改。然後將標記產生器所產生的標記以相同的順序放入新的字元串陣列 cmdarray 中。

參數:
command - 一條指定的系統命令。
envp - 字元串陣列,其中每個元素的環境變數的設置格式為 name=value;如果子進程應該繼承當前進程的環境,或該參數為 null
dir - 子進程的工作目錄;如果子進程應該繼承當前進程的工作目錄,則該參數為 null
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 commandnull,或者 envp 的某個元素為 null
IllegalArgumentException - 如果 command 為空
從以下版本開始:
1.3
另請參見:
ProcessBuilder

exec

public Process exec(String[] cmdarray)
             throws IOException
在單獨的進程中執行指定命令和變數。

這是一個很有用的方法。對於 exec(cmdarray) 形式的調用而言,其行為與調用 exec(cmdarray, null, null) 完全相同。

參數:
cmdarray - 套件含所調用命令及其參數的陣列。
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 cmdarraynull,或者 cmdarray 的某個元素為 null
IndexOutOfBoundsException - 如果 cmdarray 是一個空陣列(長度為 0
另請參見:
ProcessBuilder

exec

public Process exec(String[] cmdarray,
                    String[] envp)
             throws IOException
在指定環境的獨立進程中執行指定命令和變數。

這是一個很有用的方法。對於 exec(cmdarray, envp) 形式的調用而言,其行為與調用 exec(cmdarray, envp, null) 完全相同。

參數:
cmdarray - 套件含所調用命令及其參數的陣列。
envp - 字元串陣列,其中每個元素的環境變數的設置格式為 name=value;如果子進程應該繼承當前進程的環境,或該參數為 null
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 cmdarraynull,或者 cmdarray 的某個元素為 null,或者 envp 的某個元素為 null
IndexOutOfBoundsException - 如果 cmdarray 是一個空陣列(長度為 0
另請參見:
ProcessBuilder

exec

public Process exec(String[] cmdarray,
                    String[] envp,
                    File dir)
             throws IOException
在指定環境和工作目錄的獨立進程中執行指定的命令和變數。

給定的字元串陣列 cmdarray 表示一個命令行標記,字元串陣列 envp 則表示「環境」變數設置,此方法會創建一個新進程,而指定的命令就在這個進程中執行。

此方法檢查 cmdarray 是否是一條有效的作業系統命令。哪些命令有效取決於系統,但是該命令至少必須有一個非 null 字元串的非空(null)列表。

如果 envpnull,那麼子進程會繼承當前進程的環境設置。

ProcessBuilder.start() 現在是啟用一個具有已修改環境的進程的首選方法。

dir 指定了新子進程的工作目錄。如果 dirnull,那麼子進程會繼承當前進程的當前工作目錄。

如果安全管理器存在,則用陣列 cmdarray 的第一個元素作為變數來調用安全管理器的 checkExec 方法。這可能導致拋出 SecurityException

啟動作業系統進程的方式完全取決於系統。其中有很多方面會導致錯誤:

這些情況都會拋出一個異常。該異常的具體特性取決於系統,但它總是 IOException 的一個子類別。

參數:
cmdarray - 套件含所調用命令及其參數的陣列。
envp - 字元串陣列,其中每個元素的環境變數的設置格式為 name=value,如果子進程應該繼承當前進程的環境,或該參數為 null
dir - 子進程的工作目錄;如果子進程應該繼承當前進程的工作目錄,則該參數為 null
返回:
一個新的 Process 物件,用於管理子進程
拋出:
SecurityException - 如果安全管理器存在,並且其 checkExec 方法不允許創建子進程
IOException - 如果發生 I/O 錯誤
NullPointerException - 如果 cmdarraynull,或者 cmdarray 的某個元素為 null,抑或 envp 的某個元素為 null
IndexOutOfBoundsException - 如果 cmdarray 是一個空陣列(長度為 0
從以下版本開始:
1.3
另請參見:
ProcessBuilder

availableProcessors

public int availableProcessors()
向 Java 虛擬機器返回可用處理器的數目。

該值在特定的虛擬機器調用期間可能發生更改。因此,對可用處理器數目很敏感的應用程序應該不定期地輪詢該屬性,並相應地調整其資源用法。

返回:
虛擬機器可用的最大處理器數目;從不小於 1
從以下版本開始:
1.4

freeMemory

public long freeMemory()
返回 Java 虛擬機器中的空閒記憶體量。調用 gc 方法可能導致 freeMemory 返回值的增加。

返回:
供將來分派物件使用的當前可用記憶體的近似總量,以位元組為單位。

totalMemory

public long totalMemory()
返回 Java 虛擬機器中的記憶體總量。此方法返回的值可能隨時間的推移而變化,這取決於主機環境。

注意,保存任意給定型別的一個物件所需的記憶體量可能取決於實作方法。

返回:
目前為當前和後續物件提供的記憶體總量,以位元組為單位。

maxMemory

public long maxMemory()
返回 Java 虛擬機器試圖使用的最大記憶體量。如果記憶體本身沒有限制,則返回值 Long.MAX_VALUE

返回:
虛擬機器試圖使用的最大記憶體量,以位元組為單位。
從以下版本開始:
1.4

gc

public void gc()
運行垃圾回收器。調用此方法意味著 Java 虛擬機器做了一些努力來回收未用物件,以便能夠快速地重用這些物件當前佔用的記憶體。當控制從方法調用中返回時,虛擬機器已經盡最大努力回收了所有丟棄的物件。

名稱 gc 代表「垃圾回收器」。虛擬機器根據需要在單獨的執行緒中自動執行回收過程,甚至不用顯式調用 gc 方法。

方法 System.gc() 是調用此方法的一種傳統而便捷的方式。


runFinalization

public void runFinalization()
運行掛起 finalization 的所有物件的終止方法。調用此方法意味著 Java 虛擬機器做了一些努力運行已被丟棄物件的 finalize 方法,但是這些物件的 finalize 方法還沒有運行。當控制從方法調用中返回時,Java 虛擬機器已經盡最大努力去完成所有未執行的終止方法。

如果不顯式調用 runFinalization 方法,則 Java 虛擬機器會根據需要在單獨的執行緒中自動執行此終止過程。

方法 System.runFinalization() 是調用此方法的一種傳統而便捷的方式。

另請參見:
Object.finalize()

traceInstructions

public void traceInstructions(boolean on)
啟用/禁用指令追蹤。如果 boolean 變數為 true,則執行此方法意味著讓 Java 虛擬機器發送虛擬機器中每條指令執行的除錯資訊。該資訊的格式,以及虛擬機器所發送的檔案或其他輸出串流的格式取決於主機的環境。如果虛擬機器不支持此功能,則忽略這一請求。追蹤輸出的目的地取決於系統。

如果 boolean 變數為 false,則執行此方法時將使 Java 虛擬機器停止執行詳細的指令追蹤。

參數:
on - 為 true 時啟用指令追蹤;為 false 時則禁用此功能。

traceMethodCalls

public void traceMethodCalls(boolean on)
啟用/禁用方法調用追蹤。如果 boolean 變數為 true,則執行此方法意味著讓 Java 虛擬機器發送虛擬機器中每個方法的除錯資訊。該資訊的格式,以及虛擬機器所發送的檔案或其他輸出串流的格式取決於主機的環境。如果虛擬機器不支持此功能,則忽略這一請求。

使用變數 false 調用此方法意味著虛擬機器停止發送每個調用的除錯資訊。

參數:
on - 為 true 時啟用指令追蹤;為 false 時則禁用此功能。

load

public void load(String filename)
載入作為動態資源庫的指定檔案名。檔案名變數必須是一個完整的路徑名,(例如 Runtime.getRuntime().load("/home/avh/lib/libX11.so");)。

首先,如果有安全管理器,則用 filename 作為參數調用 checkLink 方法。這可能導致安全異常。

這與 loadLibrary(String) 方法類似,但它接受通用檔案名作為變數,而不僅僅是資源庫名,從而能夠載入所有的本機程式碼檔案。

方法 System.load(String) 是調用此方法的一種傳統而便捷的方式。

參數:
filename - 要載入的檔案。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkLink 方法不允許載入指定的動態資源庫
UnsatisfiedLinkError - 如果檔案不存在。
NullPointerException - 如果 filenamenull
另請參見:
getRuntime(), SecurityException, SecurityManager.checkLink(java.lang.String)

loadLibrary

public void loadLibrary(String libname)
載入具有指定資源庫名的動態資源庫。從以前獲取資源庫檔案的本地檔案系統中載入含有本機程式碼的檔案。這一過程的細節取決於實作方法。可以以某種特定於系統的方式完成從資源庫名到特定檔案名的映射。

首先,如果有安全管理器,則用 libname 作為參數調用 checkLink 方法。這可能導致安全性異常。

方法 System.loadLibrary(String) 是調用此方法的一種傳統而便捷的方式。如果在某個類別實作中使用本機方法,則標準的策略是將本機程式碼放入一個資源庫檔案中(稱為 LibFile),然後在類別宣告中放入一個靜態的初始值設定項:

static { System.loadLibrary("LibFile"); }
 
當載入並初始化這個類別時,也將載入實作本機方法所需的本機程式碼。

如果用相同資源庫名多次調用此方法,則忽略第二次及後續的調用。

參數:
libname - 資源庫名。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkLink 方法不允許載入指定的動態資源庫
UnsatisfiedLinkError - 如果資源庫不存在。
NullPointerException - 如果 libnamenull
另請參見:
SecurityException, SecurityManager.checkLink(java.lang.String)

getLocalizedInputStream

@Deprecated
public InputStream getLocalizedInputStream(InputStream in)
已過時。 從 JDK 1.1 開始,將本地編碼位元組串流轉換為 Unicode 字元串流的首選方法是使用 InputStreamReaderBufferedReader 類別。

創建輸入串流的本地化版本。此方法獲取 InputStream,並返回除本地化外其他所有方面都和變數等效的 InputStream,這些方面包括:作為本地字元集中的字元從串流中被讀取,並將它們從本地字元集自動轉換為 Unicode。

如果參數已經是本地化串流,則可作為結果返回。

參數:
in - 要本地化的 InputStream
返回:
已本地化的輸入串流
另請參見:
InputStream, BufferedReader.BufferedReader(java.io.Reader), InputStreamReader.InputStreamReader(java.io.InputStream)

getLocalizedOutputStream

@Deprecated
public OutputStream getLocalizedOutputStream(OutputStream out)
已過時。 從 JDK 1.1 開始,將 Unicode 字元串流轉換為本地編碼位元組串流的首選方法是使用 OutputStreamWriterBufferedWriterPrintWriter 類別。

創建輸出串流的本地化版本。此方法獲取 OutputStream,並返回除本地化外其他所有方面都和變數等效的 OutputStream,這些方面包括:作為 Unicode 字元被寫入串流中,並被自動轉換為本地字元集。

如果參數已經是本地串流,則可作為結果返回。

參數:
out - 要本地化的 OutputStream
返回:
已本地化的輸出串流
另請參見:
OutputStream, BufferedWriter.BufferedWriter(java.io.Writer), OutputStreamWriter.OutputStreamWriter(java.io.OutputStream), PrintWriter.PrintWriter(java.io.OutputStream)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only