|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.lang.Runtime
public class Runtime
每個 Java 應用程序都有一個 Runtime
類別實例,使應用程序能夠與其運行的環境相連接。可以通過 getRuntime
方法獲取當前運行時。
應用程序不能創建自己的 Runtime 類別實例。
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 字元串流的首選方法是使用 InputStreamReader 和 BufferedReader 類別。 |
OutputStream |
getLocalizedOutputStream(OutputStream out)
已過時。 從 JDK 1.1 開始,將 Unicode 字元串流轉換為本地編碼位元組串流的首選方法是使用 OutputStreamWriter 、BufferedWriter 和 PrintWriter 類別。 |
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 |
方法詳細資訊 |
---|
public static Runtime getRuntime()
Runtime
類別的大多數方法是實例方法,並且必須根據當前的運行時物件對其進行調用。
Runtime
物件。public void exit(int status)
虛擬機器的關閉序列包含兩個階段。在第一個階段中,會以某種未指定的順序啟動所有已註冊的關閉鉤子 (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)
public void addShutdownHook(Thread hook)
Java 虛擬機器會為了回應以下兩類別事件而關閉:
exit
(等同於 System.exit
)方法時。或者,
關閉鉤子 只是一個已初始化但尚未啟動的執行緒。虛擬機器開始啟用其關閉序列時,它會以某種未指定的順序啟動所有已註冊的關閉鉤子,並讓它們同時運行。運行完所有的鉤子後,如果已啟用退出終結,那麼虛擬機器接著會運行所有未調用的終結方法。最後,虛擬機器會暫停。注意,關閉序列期間會繼續運行守護執行緒,如果通過調用 exit
方法來發起關閉序列,那麼也會繼續運行非守護執行緒。
一旦開始了關閉序列,則只能通過調用 halt
方法來停止這個序列,此方法可強行終止虛擬機器。
一旦開始了關閉序列,則不可能註冊新的關閉鉤子或取消註冊先前已註冊的鉤子。嘗試執行這些操作會導致拋出 IllegalStateException
。
關閉鉤子可在虛擬機器生命週期中的特定時間運行,因此應保護性地對其進行編碼。特別是應將關閉鉤子編寫為執行緒安全的,並盡可能地避免死鎖。關閉鉤子還應該不盲目地依靠某些服務,這些服務可能已註冊了自己的關閉鉤子,所以其本身可能正處於關閉進程中。例如,試圖使用其他基於執行緒的服務(如 AWT 事件指派執行緒)可能導致死鎖。
關閉鉤子應該快速地完成其工作。當程序調用 exit
時,虛擬機器應該迅速地關閉並退出。由於使用者註銷或系統關閉而終止虛擬機器時,底層的作業系統可能只允許在固定的時間內關閉並退出。因此在關閉鉤子中嘗試進行任何使用者交互或執行長時間的計算都是不明智的。
與其他所有執行緒一樣,通過調用執行緒 ThreadGroup
物件的 uncaughtException
方法,可在關閉鉤子中處理未捕獲的異常。此方法的預設實作是將該異常的堆疊(stack)空間追蹤列印至 System.err
並終止執行緒;它不會導致虛擬機器退出或暫停。
僅在很少的情況下,虛擬機器可能會中止,也就是沒有完全關閉就停止運行。虛擬機器被外部終止時會出現這種現象,比如在 Unix 上使用 SIGKILL 信號或者在 Microsoft Windows 上調用 TerminateProcess。如果由於內部資料結構損壞或試圖存取不存在的記憶體而導致本機方法執行錯誤,那麼可能也會中止虛擬機器。如果虛擬機器中止,則無法保證是否將運行關閉鉤子。
hook
- 一個已初始化但尚未啟動的 Thread
物件
IllegalArgumentException
- 如果指定的鉤子已註冊,或者可以確定鉤子正在運行或者已運行完畢
IllegalStateException
- 如果虛擬機器已經處於關閉進程中
SecurityException
- 如果安全管理器存在並且拒絕 RuntimePermission
("shutdownHooks")removeShutdownHook(java.lang.Thread)
,
halt(int)
,
exit(int)
public boolean removeShutdownHook(Thread hook)
hook
- 要刪除的鉤子
IllegalStateException
- 如果虛擬機器已經處於關閉進程中
SecurityException
- 如果安全管理器存在並且拒絕 RuntimePermission
("shutdownHooks")addShutdownHook(java.lang.Thread)
,
exit(int)
public void halt(int status)
應小心使用此方法。與 exit
方法不同,此方法不會啟動關閉鉤子,並且如果已啟用退出終結,此方法也不會運行未調用的終結方法。如果已經發起關閉序列,那麼此方法不會等待所有正在運行的關閉鉤子或終結方法完成其工作。
status
- 終止狀態。按照慣例,非零的狀態碼表明非正常終止。如果已經調用了 exit
(System.exit
也一樣)方法,那麼該狀態碼將覆寫已傳遞至此方法的狀態碼。
SecurityException
- 如果安全管理器存在,並且其 checkExit
方法不允許具有指定狀態時退出exit(int)
,
addShutdownHook(java.lang.Thread)
,
removeShutdownHook(java.lang.Thread)
@Deprecated public static void runFinalizersOnExit(boolean value)
如果有安全管理器,則首先使用 0 作為變數來調用其 checkExit
方法,以確保允許退出。這可能會導致 SecurityException。
value
- 如果啟用退出時終結,則該參數為 true,如果禁用退出時終結,則該參數為 false
SecurityException
- 如果安全管理器存在並且其 checkExit
方法不允許退出。exit(int)
,
gc()
,
SecurityManager.checkExit(int)
public Process exec(String command) throws IOException
這是一個很有用的方法。對於 exec(command) 形式的調用而言,其行為與調用 exec
(command, null, null) 完全相同。
command
- 一條指定的系統命令。
Process
物件,用於管理子進程
SecurityException
- 如果安全管理器存在,並且其 checkExec
方法不允許創建子進程
IOException
- 如果發生 I/O 錯誤
NullPointerException
- 如果 command
為 null
IllegalArgumentException
- 如果 command
為空exec(String[], String[], File)
,
ProcessBuilder
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
- 如果 command
為 null
,或 envp
的元素之一為 null
IllegalArgumentException
- 如果 command
為空exec(String[], String[], File)
,
ProcessBuilder
public Process exec(String command, String[] envp, File dir) throws IOException
這是一個很有用的方法。對於 exec(command, envp, dir) 形式的調用而言,其行為與調用 exec
(cmdarray, envp, dir) 完全相同,其中 cmdarray
是 command
中所有標記的陣列。
更準確地說,可以使用通過調用 new
創建的 StringTokenizer
(command)StringTokenizer
將 command
字元串拆解成標記,調用時不對字元類別別做進一步的修改。然後將標記產生器所產生的標記以相同的順序放入新的字元串陣列 cmdarray
中。
command
- 一條指定的系統命令。envp
- 字元串陣列,其中每個元素的環境變數的設置格式為 name=value;如果子進程應該繼承當前進程的環境,或該參數為 null。dir
- 子進程的工作目錄;如果子進程應該繼承當前進程的工作目錄,則該參數為 null。
Process
物件,用於管理子進程
SecurityException
- 如果安全管理器存在,並且其 checkExec
方法不允許創建子進程
IOException
- 如果發生 I/O 錯誤
NullPointerException
- 如果 command
為 null
,或者 envp
的某個元素為 null
IllegalArgumentException
- 如果 command
為空ProcessBuilder
public Process exec(String[] cmdarray) throws IOException
這是一個很有用的方法。對於 exec(cmdarray) 形式的調用而言,其行為與調用 exec
(cmdarray, null, null) 完全相同。
cmdarray
- 套件含所調用命令及其參數的陣列。
Process
物件,用於管理子進程
SecurityException
- 如果安全管理器存在,並且其 checkExec
方法不允許創建子進程
IOException
- 如果發生 I/O 錯誤
NullPointerException
- 如果 cmdarray
為 null
,或者 cmdarray
的某個元素為 null
IndexOutOfBoundsException
- 如果 cmdarray
是一個空陣列(長度為 0
)ProcessBuilder
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
- 如果 cmdarray
為 null
,或者 cmdarray
的某個元素為 null
,或者 envp
的某個元素為 null
IndexOutOfBoundsException
- 如果 cmdarray
是一個空陣列(長度為 0
)ProcessBuilder
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
給定的字元串陣列 cmdarray
表示一個命令行標記,字元串陣列 envp
則表示「環境」變數設置,此方法會創建一個新進程,而指定的命令就在這個進程中執行。
此方法檢查 cmdarray
是否是一條有效的作業系統命令。哪些命令有效取決於系統,但是該命令至少必須有一個非 null 字元串的非空(null)列表。
如果 envp 為 null,那麼子進程會繼承當前進程的環境設置。
ProcessBuilder.start()
現在是啟用一個具有已修改環境的進程的首選方法。
dir 指定了新子進程的工作目錄。如果 dir 為 null,那麼子進程會繼承當前進程的當前工作目錄。
如果安全管理器存在,則用陣列 cmdarray
的第一個元素作為變數來調用安全管理器的 checkExec
方法。這可能導致拋出 SecurityException
。
啟動作業系統進程的方式完全取決於系統。其中有很多方面會導致錯誤:
這些情況都會拋出一個異常。該異常的具體特性取決於系統,但它總是 IOException
的一個子類別。
cmdarray
- 套件含所調用命令及其參數的陣列。envp
- 字元串陣列,其中每個元素的環境變數的設置格式為 name=value,如果子進程應該繼承當前進程的環境,或該參數為 null。dir
- 子進程的工作目錄;如果子進程應該繼承當前進程的工作目錄,則該參數為 null。
Process
物件,用於管理子進程
SecurityException
- 如果安全管理器存在,並且其 checkExec
方法不允許創建子進程
IOException
- 如果發生 I/O 錯誤
NullPointerException
- 如果 cmdarray
為 null
,或者 cmdarray
的某個元素為 null
,抑或 envp
的某個元素為 null
IndexOutOfBoundsException
- 如果 cmdarray
是一個空陣列(長度為 0
)ProcessBuilder
public int availableProcessors()
該值在特定的虛擬機器調用期間可能發生更改。因此,對可用處理器數目很敏感的應用程序應該不定期地輪詢該屬性,並相應地調整其資源用法。
public long freeMemory()
gc
方法可能導致 freeMemory
返回值的增加。
public long totalMemory()
注意,保存任意給定型別的一個物件所需的記憶體量可能取決於實作方法。
public long maxMemory()
Long.MAX_VALUE
。
public void gc()
名稱 gc
代表「垃圾回收器」。虛擬機器根據需要在單獨的執行緒中自動執行回收過程,甚至不用顯式調用 gc
方法。
方法 System.gc()
是調用此方法的一種傳統而便捷的方式。
public void runFinalization()
finalize
方法,但是這些物件的 finalize
方法還沒有運行。當控制從方法調用中返回時,Java 虛擬機器已經盡最大努力去完成所有未執行的終止方法。
如果不顯式調用 runFinalization
方法,則 Java 虛擬機器會根據需要在單獨的執行緒中自動執行此終止過程。
方法 System.runFinalization()
是調用此方法的一種傳統而便捷的方式。
Object.finalize()
public void traceInstructions(boolean on)
boolean
變數為 true
,則執行此方法意味著讓 Java 虛擬機器發送虛擬機器中每條指令執行的除錯資訊。該資訊的格式,以及虛擬機器所發送的檔案或其他輸出串流的格式取決於主機的環境。如果虛擬機器不支持此功能,則忽略這一請求。追蹤輸出的目的地取決於系統。
如果 boolean
變數為 false
,則執行此方法時將使 Java 虛擬機器停止執行詳細的指令追蹤。
on
- 為 true
時啟用指令追蹤;為 false
時則禁用此功能。public void traceMethodCalls(boolean on)
boolean
變數為 true
,則執行此方法意味著讓 Java 虛擬機器發送虛擬機器中每個方法的除錯資訊。該資訊的格式,以及虛擬機器所發送的檔案或其他輸出串流的格式取決於主機的環境。如果虛擬機器不支持此功能,則忽略這一請求。
使用變數 false 調用此方法意味著虛擬機器停止發送每個調用的除錯資訊。
on
- 為 true
時啟用指令追蹤;為 false
時則禁用此功能。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
- 如果 filename
為 null
getRuntime()
,
SecurityException
,
SecurityManager.checkLink(java.lang.String)
public void loadLibrary(String libname)
首先,如果有安全管理器,則用 libname
作為參數調用 checkLink
方法。這可能導致安全性異常。
方法 System.loadLibrary(String)
是調用此方法的一種傳統而便捷的方式。如果在某個類別實作中使用本機方法,則標準的策略是將本機程式碼放入一個資源庫檔案中(稱為 LibFile
),然後在類別宣告中放入一個靜態的初始值設定項:
當載入並初始化這個類別時,也將載入實作本機方法所需的本機程式碼。static { System.loadLibrary("LibFile"); }
如果用相同資源庫名多次調用此方法,則忽略第二次及後續的調用。
libname
- 資源庫名。
SecurityException
- 如果安全管理器存在,並且其 checkLink
方法不允許載入指定的動態資源庫
UnsatisfiedLinkError
- 如果資源庫不存在。
NullPointerException
- 如果 libname
為 null
SecurityException
,
SecurityManager.checkLink(java.lang.String)
@Deprecated public InputStream getLocalizedInputStream(InputStream in)
InputStreamReader
和 BufferedReader
類別。
InputStream
,並返回除本地化外其他所有方面都和變數等效的 InputStream
,這些方面包括:作為本地字元集中的字元從串流中被讀取,並將它們從本地字元集自動轉換為 Unicode。
如果參數已經是本地化串流,則可作為結果返回。
in
- 要本地化的 InputStream
InputStream
,
BufferedReader.BufferedReader(java.io.Reader)
,
InputStreamReader.InputStreamReader(java.io.InputStream)
@Deprecated public OutputStream getLocalizedOutputStream(OutputStream out)
OutputStreamWriter
、BufferedWriter
和 PrintWriter
類別。
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。