鴻蒙OS Runtime

2022-05-19 16:19 更新

Runtime

java.lang.Object

|---java.lang.Runtime

public class Runtime
extends Object

每個 Java 應(yīng)用程序都有一個 Runtime 類的實(shí)例,它允許應(yīng)用程序與運(yùn)行應(yīng)用程序的環(huán)境進(jìn)行交互。 當(dāng)前運(yùn)行時可以從 getRuntime 方法中獲取。

應(yīng)用程序無法創(chuàng)建自己的此類實(shí)例。

方法總結(jié)

修飾符和類型 方法 描述
void addShutdownHook(Thread hook) 注冊一個新的虛擬機(jī)關(guān)閉掛鉤。
int availableProcessors() 返回 Java 虛擬機(jī)可用的處理器數(shù)量。
Process exec(String command) 在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。
Process exec(String[] cmdarray) 在單獨(dú)的進(jìn)程中執(zhí)行指定的命令和參數(shù)。
Process exec(String[] cmdarray, String[] envp) 在具有指定環(huán)境的單獨(dú)進(jìn)程中執(zhí)行指定的命令和參數(shù)。
Process exec(String[] cmdarray, String[] envp, File dir) 在具有指定環(huán)境和工作目錄的單獨(dú)進(jìn)程中執(zhí)行指定的命令和參數(shù)。
Process exec(String command, String[] envp) 在具有指定環(huán)境的單獨(dú)進(jìn)程中執(zhí)行指定的字符串命令。
Process exec(String command, String[] envp, File dir) 在具有指定環(huán)境和工作目錄的單獨(dú)進(jìn)程中執(zhí)行指定的字符串命令。
void exit(int status) 通過啟動其關(guān)閉序列來終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。
long freeMemory() 返回 Java 虛擬機(jī)中的可用內(nèi)存量。
void gc() 運(yùn)行垃圾收集器。
InputStream getLocalizedInputStream(InputStream in) 已棄用。 從 JDK 1.1 開始,將本地編碼中的字節(jié)流轉(zhuǎn)換為 Unicode 中的字符流的首選方法是通過 InputStreamReader 和 BufferedReader 類。
OutputStream getLocalizedOutputStream(OutputStream out) 已棄用。 從 JDK 1.1 開始,將 Unicode 字符流轉(zhuǎn)換為本地編碼的字節(jié)流的首選方法是通過 OutputStreamWriter、BufferedWriter 和 PrintWriter 類。
static Runtime getRuntime() 返回與當(dāng)前 Java 應(yīng)用程序關(guān)聯(lián)的運(yùn)行時對象。
void halt(int status) 強(qiáng)制終止當(dāng)前運(yùn)行的 Java 虛擬機(jī)。
void load(String filename) 加載由文件名參數(shù)指定的本機(jī)庫。
void loadLibrary(String libname) 加載由 libname 參數(shù)指定的本機(jī)庫。
long maxMemory() 返回 Java 虛擬機(jī)將嘗試使用的最大內(nèi)存量。
boolean removeShutdownHook(Thread hook) 取消注冊以前注冊的虛擬機(jī)關(guān)閉掛鉤。
void runFinalization() 運(yùn)行任何等待終結(jié)的對象的終結(jié)方法。
static void runFinalizersOnExit(boolean value) 已棄用。 這種方法本質(zhì)上是不安全的。 這可能會導(dǎo)致在其他線程同時操作這些對象時對活動對象調(diào)用終結(jié)器,從而導(dǎo)致行為不穩(wěn)定或死鎖。
long totalMemory() 返回 Java 虛擬機(jī)中的內(nèi)存總量。
void traceInstructions(boolean on) 啟用/禁用指令跟蹤。
void traceMethodCalls(boolean on) 啟用/禁用方法調(diào)用的跟蹤。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

方法詳情

getRuntime

public static Runtime getRuntime()

返回與當(dāng)前 Java 應(yīng)用程序關(guān)聯(lián)的運(yùn)行時對象。 Runtime 類的大部分方法都是實(shí)例方法,必須針對當(dāng)前運(yùn)行時對象調(diào)用。

返回:

與當(dāng)前 Java 應(yīng)用程序關(guān)聯(lián)的運(yùn)行時對象。

exit

public void exit(int status)

通過啟動其關(guān)閉序列來終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。此方法永遠(yuǎn)不會正常返回。該參數(shù)用作狀態(tài)碼;按照慣例,非零狀態(tài)碼表示異常終止。

虛擬機(jī)的關(guān)閉順序包括兩個階段。在第一階段,所有已注冊的關(guān)閉掛鉤(如果有)都以某種未指定的順序啟動,并允許同時運(yùn)行直到它們完成。在第二階段,如果 finalization-on-exit 已啟用,則所有未調(diào)用的終結(jié)器都會運(yùn)行。完成此操作后,虛擬機(jī)將停止。

如果在虛擬機(jī)開始其關(guān)閉序列之后調(diào)用此方法,則如果正在運(yùn)行關(guān)閉掛鉤,則此方法將無限期阻塞。如果已經(jīng)運(yùn)行了關(guān)閉掛鉤并且已啟用退出終止,則此方法會在狀態(tài)非零時使用給定的狀態(tài)代碼暫停虛擬機(jī);否則,它會無限期地阻塞。

System#exit(int) 方法是調(diào)用此方法的常規(guī)且方便的方法。

參數(shù):

參數(shù)名稱 參數(shù)描述
status 終止?fàn)顟B(tài)。 按照慣例,非零狀態(tài)碼表示異常終止。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExit 方法不允許以指定狀態(tài)退出

addShutdownHook

public void addShutdownHook(Thread hook)

注冊一個新的虛擬機(jī)關(guān)閉掛鉤。

Java 虛擬機(jī)關(guān)閉以響應(yīng)兩種事件:

  • 程序正常退出,當(dāng)最后一個非守護(hù)線程退出或調(diào)用 exit(等效于 System#exit(int))方法時,或
  • 虛擬機(jī)響應(yīng)用戶中斷(例如鍵入 ^C)或系統(tǒng)范圍的事件(例如用戶注銷或系統(tǒng)關(guān)閉)而終止。

關(guān)閉掛鉤只是一個已初始化但未啟動的線程。當(dāng)虛擬機(jī)開始其關(guān)閉序列時,它將以某種未指定的順序啟動所有已注冊的關(guān)閉掛鉤并讓它們同時運(yùn)行。當(dāng)所有鉤子都完成后,如果 finalization-on-exit 已啟用,它將運(yùn)行所有未調(diào)用的終結(jié)器。最后,虛擬機(jī)將停止。請注意,在關(guān)閉序列期間,守護(hù)線程將繼續(xù)運(yùn)行,如果通過調(diào)用 exit 方法啟動關(guān)閉,非守護(hù)線程也將繼續(xù)運(yùn)行。

一旦關(guān)閉序列開始,它只能通過調(diào)用halt方法來停止,該方法會強(qiáng)制終止虛擬機(jī)。

一旦關(guān)閉序列開始,就不可能注冊新的關(guān)閉掛鉤或取消注冊先前注冊的掛鉤。嘗試這些操作中的任何一個都將導(dǎo)致拋出 IllegalStateException。

關(guān)閉掛鉤在虛擬機(jī)生命周期的一個微妙時刻運(yùn)行,因此應(yīng)該進(jìn)行防御性編碼。特別是,它們應(yīng)該寫成線程安全的,并盡可能避免死鎖。他們也不應(yīng)該盲目依賴可能已經(jīng)注冊了自己的關(guān)閉鉤子的服務(wù),因此他們自己可能正在關(guān)閉的過程中。例如,嘗試使用其他基于線程的服務(wù)(例如 AWT 事件調(diào)度線程)可能會導(dǎo)致死鎖。

關(guān)閉掛鉤也應(yīng)該快速完成它們的工作。當(dāng)程序調(diào)用 exit 時,期望虛擬機(jī)將立即關(guān)閉并退出。當(dāng)虛擬機(jī)由于用戶注銷或系統(tǒng)關(guān)閉而終止時,底層操作系統(tǒng)可能只允許關(guān)閉和退出的固定時間量。因此,不建議嘗試任何用戶交互或在關(guān)閉掛鉤中執(zhí)行長時間運(yùn)行的計(jì)算。

與在任何其他線程中一樣,通過調(diào)用線程的 ThreadGroup 對象的 ThreadGroup#uncaughtException 方法,在關(guān)閉掛鉤中處理未捕獲的異常。此方法的默認(rèn)實(shí)現(xiàn)將異常的堆棧跟蹤打印到 System#err 并終止線程;它不會導(dǎo)致虛擬機(jī)退出或停止。

在極少數(shù)情況下,虛擬機(jī)可能會中止,即在沒有完全關(guān)閉的情況下停止運(yùn)行。當(dāng)虛擬機(jī)在外部終止時會發(fā)生這種情況,例如在 Unix 上使用 SIGKILL 信號或在 Microsoft Windows 上使用 TerminateProcess 調(diào)用。如果本地方法出錯,例如破壞內(nèi)部數(shù)據(jù)結(jié)構(gòu)或嘗試訪問不存在的內(nèi)存,虛擬機(jī)也可能中止。如果虛擬機(jī)中止,則無法保證是否會運(yùn)行任何關(guān)閉掛鉤。

參數(shù):

參數(shù)名稱 參數(shù)描述
hook 一個已初始化但未啟動的 Thread 對象

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果指定的鉤子已經(jīng)注冊,或者是否可以確定鉤子已經(jīng)運(yùn)行或者已經(jīng)運(yùn)行
IllegalStateException 如果虛擬機(jī)已經(jīng)處于關(guān)閉過程中
SecurityException 如果存在安全管理器并且它拒絕 RuntimePermission("shutdownHooks")

removeShutdownHook

public boolean removeShutdownHook(Thread hook)

取消注冊以前注冊的虛擬機(jī)關(guān)閉掛鉤。

參數(shù):

參數(shù)名稱 參數(shù)描述
hook 要移除的鉤子

返回:

如果指定的鉤子先前已注冊并成功取消注冊,則為 true,否則為 false。

Throws:

Throw名稱 Throw描述
IllegalStateException 如果虛擬機(jī)已經(jīng)處于關(guān)閉過程中
SecurityException 如果存在安全管理器并且它拒絕 RuntimePermission("shutdownHooks")

halt

public void halt(int status)

強(qiáng)制終止當(dāng)前運(yùn)行的 Java 虛擬機(jī)。 此方法永遠(yuǎn)不會正常返回。

使用此方法時應(yīng)格外小心。 與 exit 方法不同,如果 finalization-on-exit 已啟用,此方法不會導(dǎo)致關(guān)閉掛鉤啟動并且不會運(yùn)行未調(diào)用的終結(jié)器。 如果已啟動關(guān)閉序列,則此方法不會等待任何正在運(yùn)行的關(guān)閉掛鉤或終結(jié)器完成其工作。

參數(shù):

參數(shù)名稱 參數(shù)描述
status 終止?fàn)顟B(tài)。 按照慣例,非零狀態(tài)碼表示異常終止。 如果 Runtime#exit(等效于 System#exit(int))方法已被調(diào)用,則此狀態(tài)代碼將覆蓋傳遞給該方法的狀態(tài)代碼。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExit 方法不允許以指定狀態(tài)退出

runFinalizersOnExit

@Deprecated public static void runFinalizersOnExit(boolean value)

已棄用。 這種方法本質(zhì)上是不安全的。 這可能會導(dǎo)致在其他線程同時操作這些對象時對活動對象調(diào)用終結(jié)器,從而導(dǎo)致行為不穩(wěn)定或死鎖。

在退出時啟用或禁用終結(jié); 這樣做指定在 Java 運(yùn)行時退出之前運(yùn)行具有尚未自動調(diào)用的終結(jié)器的所有對象的終結(jié)器。 默認(rèn)情況下,退出時的最終確定是禁用的。

如果存在安全管理器,則首先調(diào)用其 checkExit 方法,并以 0 作為其參數(shù),以確保允許退出。 這可能會導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱 參數(shù)描述
value true 在退出時啟用最終確定,false 禁用

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 checkExit 方法不允許退出。

exec

public Process exec(String command) throws IOException

在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。

這是一種方便的方法。 調(diào)用 exec(command) 形式的行為與調(diào)用 exec(command, null, null) 完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 指定的系統(tǒng)命令。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果命令為 null
IllegalArgumentException 如果命令為empty

exec

public Process exec(String command, String[] envp) throws IOException

在具有指定環(huán)境的單獨(dú)進(jìn)程中執(zhí)行指定的字符串命令。

這是一種方便的方法。 exec(command, envp) 形式的調(diào)用與調(diào)用 exec(command, envp, null) 的行為方式完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 指定的系統(tǒng)命令。
envp 字符串?dāng)?shù)組,其中每個元素都具有格式 name=value 的環(huán)境變量設(shè)置,如果子進(jìn)程應(yīng)繼承當(dāng)前進(jìn)程的環(huán)境,則為 null。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果 command 為 null,或者 envp 的元素之一為 null
IllegalArgumentException 如果命令為empty

exec

public Process exec(String command, String[] envp, File dir) throws IOException

在具有指定環(huán)境和工作目錄的單獨(dú)進(jìn)程中執(zhí)行指定的字符串命令。

這是一種方便的方法。 exec(command, envp, dir) 形式的調(diào)用與調(diào)用 exec(cmdarray, envp, dir) 的行為方式完全相同,其中 cmdarray 是命令中所有標(biāo)記的數(shù)組。

更準(zhǔn)確地說,使用由調(diào)用 new StringTokenizer(command) 創(chuàng)建的 StringTokenizer 將命令字符串分解為標(biāo)記,而無需進(jìn)一步修改字符類別。 標(biāo)記器生成的標(biāo)記然后以相同的順序放置在新的字符串?dāng)?shù)組 cmdarray 中。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 指定的系統(tǒng)命令。
envp 字符串?dāng)?shù)組,其中每個元素都具有格式 name=value 的環(huán)境變量設(shè)置,如果子進(jìn)程應(yīng)繼承當(dāng)前進(jìn)程的環(huán)境,則為 null。
dir 子進(jìn)程的工作目錄,如果子進(jìn)程應(yīng)該繼承當(dāng)前進(jìn)程的工作目錄,則返回 null。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果 command 為 null,或者 envp 的元素之一為 null
IllegalArgumentException 如果命令為empty

exec

public Process exec(String[] cmdarray) throws IOException

在單獨(dú)的進(jìn)程中執(zhí)行指定的命令和參數(shù)。

這是一種方便的方法。 exec(cmdarray) 形式的調(diào)用與調(diào)用 exec(cmdarray, null, null) 的行為方式完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
cmdarray 包含要調(diào)用的命令及其參數(shù)的數(shù)組。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果 cmdarray 為 null,或者 cmdarray 的元素之一為 null
IndexOutOfBoundsException 如果 cmdarray 是一個空數(shù)組(長度為 0)

exec

public Process exec(String[] cmdarray, String[] envp) throws IOException

在具有指定環(huán)境的單獨(dú)進(jìn)程中執(zhí)行指定的命令和參數(shù)。

這是一種方便的方法。 exec(cmdarray, envp) 形式的調(diào)用與調(diào)用 exec(cmdarray, envp, null) 的行為方式完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
cmdarray 包含要調(diào)用的命令及其參數(shù)的數(shù)組。
envp 字符串?dāng)?shù)組,其中每個元素都具有格式 name=value 的環(huán)境變量設(shè)置,如果子進(jìn)程應(yīng)繼承當(dāng)前進(jìn)程的環(huán)境,則為 null。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果 cmdarray 為 null,或者 cmdarray 的元素之一為 null,或者 envp 的元素之一為 null
IndexOutOfBoundsException 如果 cmdarray 是一個空數(shù)組(長度為 0)

exec

public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException

在具有指定環(huán)境和工作目錄的單獨(dú)進(jìn)程中執(zhí)行指定的命令和參數(shù)。

給定一個字符串?dāng)?shù)組 cmdarray,表示命令行的標(biāo)記,和一個字符串?dāng)?shù)組 envp,表示“環(huán)境”變量設(shè)置,這個方法創(chuàng)建一個新進(jìn)程來執(zhí)行指定的命令。

此方法檢查 cmdarray 是否為有效的操作系統(tǒng)命令。哪些命令有效取決于系統(tǒng),但至少該命令必須是非空字符串的非空列表。

如果 envp 為 null,則子進(jìn)程繼承當(dāng)前進(jìn)程的環(huán)境設(shè)置。

在某些操作系統(tǒng)上啟動進(jìn)程可能需要一組最小的系統(tǒng)相關(guān)環(huán)境變量。因此,子進(jìn)程可能會繼承指定環(huán)境之外的其他環(huán)境變量設(shè)置。

ProcessBuilder#start() 現(xiàn)在是使用修改后的環(huán)境啟動進(jìn)程的首選方式。

新子進(jìn)程的工作目錄由 dir 指定。如果 dir 為 null,則子進(jìn)程繼承當(dāng)前進(jìn)程的當(dāng)前工作目錄。

如果存在安全管理器,則使用數(shù)組 cmdarray 的第一個組件作為其參數(shù)調(diào)用其 SecurityManager#checkExec 方法。這可能會導(dǎo)致拋出 SecurityException。

啟動操作系統(tǒng)進(jìn)程高度依賴于系統(tǒng)??赡艹鲥e的許多事情包括:

  • 找不到操作系統(tǒng)程序文件。
  • 訪問程序文件被拒絕。
  • 工作目錄不存在。

在這種情況下會拋出異常。 異常的確切性質(zhì)取決于系統(tǒng),但它始終是 IOException 的子類。

參數(shù):

參數(shù)名稱 參數(shù)描述
cmdarray 包含要調(diào)用的命令及其參數(shù)的數(shù)組。
envp 字符串?dāng)?shù)組,其中每個元素的環(huán)境變量設(shè)置格式為 name=value,如果子進(jìn)程應(yīng)繼承當(dāng)前進(jìn)程的環(huán)境,則為 null。
dir 子進(jìn)程的工作目錄,如果子進(jìn)程應(yīng)該繼承當(dāng)前進(jìn)程的工作目錄,則返回 null。

返回:

用于管理子流程的新流程對象

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程
IOException 如果發(fā)生 I/O 錯誤
NullPointerException 如果 cmdarray 為 null,或者 cmdarray 的元素之一為 null,或者 envp 的元素之一為 null
IndexOutOfBoundsException 如果 cmdarray 是一個空數(shù)組(長度為 0)

availableProcessors

public int availableProcessors()

返回 Java 虛擬機(jī)可用的處理器數(shù)量。

此值可能會在虛擬機(jī)的特定調(diào)用期間發(fā)生變化。 因此,對可用處理器數(shù)量敏感的應(yīng)用程序應(yīng)偶爾輪詢此屬性并適當(dāng)調(diào)整其資源使用情況。

返回:

虛擬機(jī)可用的最大處理器數(shù)量; 從不小于一

freeMemory

public long freeMemory()

返回 Java 虛擬機(jī)中的可用內(nèi)存量。 調(diào)用 gc 方法可能會導(dǎo)致 freeMemory 返回的值增加。

返回:

當(dāng)前可用于未來分配的對象的內(nèi)存總量的近似值,以字節(jié)為單位。

totalMemory

public long totalMemory()

返回 Java 虛擬機(jī)中的內(nèi)存總量。 此方法返回的值可能會隨時間變化,具體取決于主機(jī)環(huán)境。

請注意,保存任何給定類型的對象所需的內(nèi)存量可能取決于實(shí)現(xiàn)。

返回:

當(dāng)前可用于當(dāng)前和未來對象的內(nèi)存總量,以字節(jié)為單位。

maxMemory

public long maxMemory()

返回 Java 虛擬機(jī)將嘗試使用的最大內(nèi)存量。 如果沒有固有限制,則返回 Long.MAX_VALUE 值。

返回:

虛擬機(jī)將嘗試使用的最大內(nèi)存量,以字節(jié)為單位

gc

public void gc()

運(yùn)行垃圾收集器。 調(diào)用此方法表明 Java 虛擬機(jī)花費(fèi)精力回收未使用的對象,以使它們當(dāng)前占用的內(nèi)存可用于快速重用。 當(dāng)控制從方法調(diào)用返回時,虛擬機(jī)已盡最大努力回收所有丟棄的對象。

gc 這個名字代表“垃圾收集器”。 虛擬機(jī)根據(jù)需要在單獨(dú)的線程中自動執(zhí)行此回收過程,即使沒有顯式調(diào)用 gc 方法。

System#gc() 方法是調(diào)用此方法的常規(guī)且方便的方法。

runFinalization

public void runFinalization()

運(yùn)行任何等待終結(jié)的對象的終結(jié)方法。 調(diào)用此方法表明 Java 虛擬機(jī)花費(fèi)精力運(yùn)行已發(fā)現(xiàn)已丟棄但尚未運(yùn)行其 finalize 方法的對象的 finalize 方法。 當(dāng)控制從方法調(diào)用返回時,虛擬機(jī)已盡最大努力完成所有未完成的終結(jié)。

如果未顯式調(diào)用 runFinalization 方法,則虛擬機(jī)會根據(jù)需要在單獨(dú)的線程中自動執(zhí)行終結(jié)過程。

System#runFinalization() 方法是調(diào)用此方法的常規(guī)且方便的方法。

traceInstructions

public void traceInstructions(boolean on)

啟用/禁用指令跟蹤。 如果布爾參數(shù)為真,則此方法建議 Java 虛擬機(jī)在執(zhí)行時為虛擬機(jī)中的每條指令發(fā)出調(diào)試信息。 此信息的格式以及將其發(fā)送到的文件或其他輸出流取決于主機(jī)環(huán)境。 如果虛擬機(jī)不支持此功能,它可能會忽略此請求。 跟蹤輸出的目的地取決于系統(tǒng)。

如果布爾參數(shù)為假,此方法會導(dǎo)致虛擬機(jī)停止執(zhí)行它正在執(zhí)行的詳細(xì)指令跟蹤。

參數(shù):

參數(shù)名稱 參數(shù)描述
on true 啟用指令跟蹤; false 禁用此功能。

traceMethodCalls

public void traceMethodCalls(boolean on)

啟用/禁用方法調(diào)用的跟蹤。 如果布爾參數(shù)為真,則此方法建議 Java 虛擬機(jī)在調(diào)用虛擬機(jī)時為虛擬機(jī)中的每個方法發(fā)出調(diào)試信息。 此信息的格式以及將其發(fā)送到的文件或其他輸出流取決于主機(jī)環(huán)境。 如果虛擬機(jī)不支持此功能,它可能會忽略此請求。

使用參數(shù) false 調(diào)用此方法表明虛擬機(jī)停止發(fā)出每次調(diào)用的調(diào)試信息。

參數(shù):

參數(shù)名稱 參數(shù)描述
on true 啟用指令跟蹤; false 禁用此功能。

load

public void load(String filename)

加載由文件名參數(shù)指定的本機(jī)庫。文件名參數(shù)必須是絕對路徑名。 (例如 Runtime.getRuntime().load("/home/avh/lib/libX11.so");)。如果 filename 參數(shù)在去除任何特定于平臺的庫前綴、路徑和文件擴(kuò)展名后,指示名稱為 L 的庫,并且名為 L 的本機(jī)庫與 VM 靜態(tài)鏈接,則 JNI_OnLoad_L 函數(shù)調(diào)用由庫導(dǎo)出的,而不是嘗試加載動態(tài)庫。與參數(shù)匹配的文件名不必存在于文件系統(tǒng)中。有關(guān)更多詳細(xì)信息,請參閱 JNI 規(guī)范。否則,文件名參數(shù)以與實(shí)現(xiàn)相關(guān)的方式映射到本機(jī)庫映像。

首先,如果有一個安全管理器,它的 checkLink 方法以文件名作為它的參數(shù)被調(diào)用。這可能會導(dǎo)致安全異常。

這類似于方法 loadLibrary(java.lang.String),但它接受一個通用文件名作為參數(shù),而不僅僅是一個庫名,允許加載任何本地代碼文件。

System#load(String) 方法是調(diào)用此方法的常規(guī)且方便的方法。

參數(shù):

參數(shù)名稱 參數(shù)描述
filename 要加載的文件。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 checkLink 方法不允許加載指定的動態(tài)庫
UnsatisfiedLinkError 如果文件名不是絕對路徑名,則本機(jī)庫未與 VM 靜態(tài)鏈接,或者主機(jī)系統(tǒng)無法將庫映射到本機(jī)庫映像。
NullPointerException 如果文件名為空

loadLibrary

public void loadLibrary(String libname)

加載由 libname 參數(shù)指定的本機(jī)庫。 libname 參數(shù)不得包含任何特定于平臺的前綴、文件擴(kuò)展名或路徑。 如果名為 libname 的本機(jī)庫與 VM 靜態(tài)鏈接,則調(diào)用該庫導(dǎo)出的 JNI_OnLoad_libname 函數(shù)。 有關(guān)更多詳細(xì)信息,請參閱 JNI 規(guī)范。 否則,libname 參數(shù)將從系統(tǒng)庫位置加載并以與實(shí)現(xiàn)相關(guān)的方式映射到本機(jī)庫映像。

首先,如果有一個安全管理器,它的 checkLink 方法會以 libname 作為參數(shù)調(diào)用。 這可能會導(dǎo)致安全異常。

System#loadLibrary(String) 方法是調(diào)用此方法的常規(guī)且方便的方法。 如果要在類的實(shí)現(xiàn)中使用本地方法,標(biāo)準(zhǔn)策略是將本地代碼放入庫文件(稱為 LibFile)中,然后放入靜態(tài)初始化程序:

 static { System.loadLibrary("LibFile"); } 

在類聲明中。 當(dāng)類被加載和初始化時,本地方法的必要本地代碼實(shí)現(xiàn)也將被加載。

如果使用相同的庫名稱多次調(diào)用此方法,則忽略第二次和后續(xù)調(diào)用。

參數(shù):

參數(shù)名稱 參數(shù)描述
libname 庫的名稱。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 checkLink 方法不允許加載指定的動態(tài)庫
UnsatisfiedLinkError 如果 libname 參數(shù)包含文件路徑,則本機(jī)庫未與 VM 靜態(tài)鏈接,或者該庫無法由主機(jī)系統(tǒng)映射到本機(jī)庫映像。
NullPointerException 如果 libname 為空

getLocalizedInputStream

@Deprecated public InputStream getLocalizedInputStream(InputStream in)

已棄用。 從 JDK 1.1 開始,將本地編碼中的字節(jié)流轉(zhuǎn)換為 Unicode 中的字符流的首選方法是通過 InputStreamReader 和 BufferedReader 類。

創(chuàng)建輸入流的本地化版本。 此方法接受一個 InputStream 并返回一個在所有方面都與參數(shù)等效的 InputStream,除了它是本地化的:當(dāng)從流中讀取本地字符集中的字符時,它們會自動從本地字符集轉(zhuǎn)換為 Unicode。

如果參數(shù)已經(jīng)是本地化流,則可以將其作為結(jié)果返回。

參數(shù):

參數(shù)名稱 參數(shù)描述
in InputStream 進(jìn)行本地化

返回:

本地化輸入流

getLocalizedOutputStream

@Deprecated public OutputStream getLocalizedOutputStream(OutputStream out)

已棄用。 從 JDK 1.1 開始,將 Unicode 字符流轉(zhuǎn)換為本地編碼的字節(jié)流的首選方法是通過 OutputStreamWriter、BufferedWriter 和 PrintWriter 類。

創(chuàng)建輸出流的本地化版本。 此方法接受一個 OutputStream 并返回一個在所有方面都與參數(shù)等效的 OutputStream,除了它是本地化的:當(dāng) Unicode 字符寫入流時,它們會自動轉(zhuǎn)換為本地字符集。

如果參數(shù)已經(jīng)是本地化流,則可以將其作為結(jié)果返回。

參數(shù):

參數(shù)名稱 參數(shù)描述
out OutputStream 進(jìn)行本地化

返回:

本地化的輸出流

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號