附註:在使用本資訊及其支援的產品之前, 請務必閱讀注意事項下的一般資訊。
本「使用手冊」修訂版適用於 IBM Runtime Environment for Linux on AMD64 architecture, Java 2 Technology Edition, Version 1.4.2。
(c) Copyright Sun Microsystems, Inc. 1997, 2003, 901 San Antonio Rd., Palo Alto, CA 94303 USA. All rights reserved.
(c) Copyright International Business Machines Corporation, 1999, 2004. All rights reserved.
U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
本「使用手冊」說明適用於 IBM(R) Runtime Environment for Linux(TM) on AMD64 architecture。
IBM Runtime Environment 中,共包含 Java(TM) Virtual Machine (JVM)、核心 Sun Microsystems Java 類別以及支援檔案。在 Runtime Environment 中,並未包含全部在 SDK 套件中可以找到的類別。
本「使用手冊」中提供有關 Runtime Environment 的一般資訊,以及 Runtime Environment 的 IBM 實作與 Sun 實作之差異的相關特定資訊。請同時參閱本「使用手冊」以及 Sun 網站上內容更廣泛的文件:http://java.sun.com。
IBM JVM Diagnostics Guide 提供關於 IBM JVM 的詳細資訊。
如需已經對 SDK for Linux 測試過之發行版清單,請參閱:http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html
請注意,SDK 中包括的 Runtime Environment for Linux,只能用來執行 Java 應用程式。 如果您已經有安裝 SDK,其中也會包括 Runtime Environment。
本「使用手冊」中交替使用 "Runtime Environment" 和 "Java Virtual Machine" 兩個術語。
Runtime Environment 中,共包含 Java Virtual Machine、Java 類別以及支援的檔案。 Runtime Environment 只包含 SDK 類別中的一部份子集,這些類別足以讓您用來執行 Java 類別, 但是無法用來編譯 Java 程式。
Runtime Environment for Linux 共包括二進位物件檔以及類別檔,這些是在執行時期支援程式時所需要的檔案。Runtime Environment for Linux 中,並沒有包括任何開發用的工具, 例如 appletviewer 或 Java 編譯器 (javac), 或是僅關於開發系統的類別。
此外,有提供 Java Communications 應用程式設計介面 (API) 套件與 Runtime Environment for Linux 搭配使用。 如果您已經有安裝 Java Communications API,就可以在 JavaComm API 使用手冊 中,找到其相關資訊。
LICENSE_xx.html 檔含有 Runtime Environment for Linux 軟體的授權合約。(xx 是語言的縮寫。)
如果要檢視或列印授權合約,請使用 Web 瀏覽器開啟檔案。
The just-in-time (JIT) 編譯器 (libjitc.so) 會在 Java 應用程式或 Applet 執行時,以動態方式產生常用之位元組碼序列的機器碼。
Runtime Environment for Linux 包括 預設會啟用的 JIT 編譯器 (libjitc.so)。 您可以停用 JIT,以便從 Java 應用程式、Applet 或編譯器本身當中,將問題分離出來。
如果要停用 JIT,請使用 -Xint 選項。 在執行應用程式的 Shell 提示視窗中,輸入:
java -Xint class
若要驗證否是已啟用 JIT,請在 Shell 提示下輸入:
java -version
如果 JIT 已在使用中,便會顯示一則包含下列內容的訊息:
(JIT 已啟用)
如果 JIT 不在使用中,便會顯示一則包含下列內容的訊息:
(JIT 已停用)
「Java 原生介面 (JNI)」已隨附於 Runtime Environment 中。關於使用 JNI 的資訊,請造訪 Sun 網站: http://java.sun.com/j2se/1.4.2/docs/guide/jni。
在這個版次中,IBM 不支援「原生方法介面」。 請勿在應用程式使用這個介面。
安裝好 Runtime Environment 之後, 請編輯您的 Shell 登入 Script,並且在 PATH 陳述式中,加入此目錄:
/opt/IBMJava2-142/jre/bin
如果您的 Runtime Environment 不是安裝在 /opt/IBMJava2-142/ 目錄中,請將 /opt/IBMJava2-142/ 取代為安裝 Runtime Environment 的所在目錄。
移除 Runtime Environment for Linux 的程序,是視您安裝的是 Red Hat Package Manager (RPM) 可安裝套件, 或 Tape Archive (TAR) 壓縮套件而定。請參閱解除安裝可安裝的 Red Hat Package Manager (RPM) 套件或解除安裝壓縮的 Tape Archive (TAR) 套件以取得指示。
如果已安裝可安裝的 RPM 套件,而要解除安裝 Runtime Environment for Linux 時:
rpm -e IBMJava2-JRE-1.4.2-0.0
如果已安裝壓縮的 TAR 套件,而要解除安裝 Runtime Environment for Linux 時:
Java 工具可啟動 Java 應用程式。它需要起始 Java 類別名稱作為參數。 若沒有提供這項資訊,則會出現一則用法訊息。
JVM 會在下列三組位置中搜尋起始類別和已經使用的其他類別:bootstrap 類別路徑、已安裝的延伸項目,以及使用者類別路徑。類別名稱或 JAR 檔案名稱後面的引數會被傳遞給 main 函數。
javaw 指令同等於 java,不同之處是 javaw 沒有相關聯的主控台視窗。若您不想要出現指令提示視窗,請使用 javaw。javaw 啟動程式啟動失敗時會顯示一個包含錯誤資訊的對話框。
java 與 javaw 指令的語法如下:
java [ 選項 ] 類別 [ 引數 ... ] java [ 選項 ] -jar 檔案.jar [ 引數 ... ] javaw [ 選項 ] 類別 [ 引數 ... ] javaw [ 選項 ] -jar 檔案.jar [ 引數 ... ]
顯示在方括弧內的項目是選用性的。
若指定了 -jar 選項,則指名的 JAR 檔案要包含應用程式的類別和資源檔,且以 Main-Class manifest 標題來表示啟動類別。
啟動器具有一組現行執行時期環境可支援且未來版次中也會支援的標準選項。此外,還有一組非標準選項。
下面列示的 -X 選項,是非標準選項, 並且可能會在不預先通知的情況下受到變更。
java 指令與其他 Java 啟動器指令(如 javaw)可容許將類別名稱指定為現行語言環境之字元集中的任何 Unicode 字元。
您也可以藉由使用 Java 脫序字元,在類別名稱與引數中,指定任何 Unicode 字元。 如果要這樣做,您必須指定 -Xargencoding。如需指定 Unicode 字元,請以 \u#### 形式使用脫序字元,該形式中的 # 為十六進位數字(0 至 9,A 至 F)。
另一方面,如果要指定類別名稱和指令引數都使用 UTF8 編碼, 請使用 -Xargencoding:utf8,如果要以 ISO8859_1 編碼,則使用 -Xargencoding:latin。
java 和 javaw 兩個指令會提供轉換後的輸出訊息。 這些訊息會因 Java 執行所在的語言環境而異。java 傳回的詳細錯誤說明和其他除錯資訊,都是以英文顯示。
您可以指定類別名稱為包含完整路徑和 .class 副檔名的完整檔案名稱。 在上一版中,您只能指定和 CLASSPATH 相對的類別, 並且不容許使用 .class 副檔名。使用完整的檔案名稱使您可從您的桌面或檔案啟動器啟動 Java 應用程式。如果您使用路徑和副檔案指定 .class 檔案,系統便會將指定的路徑放入 CLASSPATH 中。 例如,java ~/myapp/thisapp.class 指令相當於指定 java -classpath ~/myapp thisapp。
記憶體回收原則由 -Xgcpolicy JVM Runtime 選項指定。
-Xgcpolicy 採用下列值:optthruput(預設值)、 optavgpause 或 gencon。 該選項會控制記憶體回收器的行為,在應用程式和整體系統的產能以及因記憶體回收所造成的暫停時間之間找出平衡點。
該選項及其值的格式為:
-Xgcpolicy:optthruput
-Xgcpolicy:optavgpause
-Xgcpolicy:gencon
當應用程式嘗試建立一個物件,但資料堆中的可用空間無法立即滿足要求時,記憶體回收器便會負責來識別未參照的物件(可回收的記憶體)、刪除它們,並讓資料堆返回到可以快速滿足即時及後續配置要求的狀態。這類的記憶體回收循環,在應用程式碼執行時會造成偶發性非預期的暫停。當應用程式的大小及複雜度增加時,資料堆隨之變大。此記憶體回收暫停時間的大小及有效位數也會有增加的趨勢。預設的記憶體回收值 optthruput,會對應用程式提供非常高的產能,但是所需的這些偶發性暫停成本,視資料堆的大小及可回收的記憶體的數量而定,其長度會從幾毫秒到數秒不等。
JVM 運用兩種技術來縮減暫停時間:
-Xgcpolicy:optavgpause 指令行選項要求使用並行記憶體回收, 來顯著縮減花在記憶體回收暫停的時間。並行記憶體回收縮減暫停時間的方式, 是靠和正常的程式執行作業,並行執行一些記憶體回收活動,來減少因收集資料堆而引起的岔斷。-Xgcpolicy:optavgpause 選項也會減輕在記憶體回收暫停期間, 增加資料堆大小所造成的影響。-Xgcpolicy:optavgpause 選項對具有大型資料堆的配置最有用。但隨著暫停時間的減少,您可能會發現應用程式的產能也會跟著減少。
在並行記憶體回收期間,有大量時間是耗費在識別相對而言持續較久的物件,並且這些物件無法收集。 如果記憶體回收只著重於較有可能回收的物件,就可以更進一步減少某些應用程式的暫停時間。 一般記憶體回收達到此目標的方式,是將資料堆區分為兩個「世代」, 即 "nursery" 和 "tenure" 兩部分。物件會視其經歷時間,放置在這些區域中。 Nursery 是兩者中較小的部分,並且包含較新的物件;tenure 則較大, 並且包含較舊的物件。物件首先會被配置到 nursery 中,如果該物件持續得夠久, 最後會被提升到 tenure 區域。
一般記憶體回收仰賴大部份的物件不會持續太久。一般記憶體回收減少暫停時間的方式, 是靠著重於收回 nursery 中的儲存體,因為 nursery 中具有最有可能回收的空間。 收集整個資料堆會導致極長的暫停時間,而不只是短暫的而已, 由於會經常收集 nursery ,因此如果 nursery 夠小,暫停時間就會相對地縮短。 不過,一般記憶體回收有一項缺點,因為經過一段時間,如果太多物件持續得太久, tenure 區域可能會變滿。如果要在發生這個狀況時,將暫停時間縮至最小, 請同時使用並行記憶體回收和一般記憶體回收。-Xgcpolicy:gencon 選項要求合併使用並行與一般記憶體回收,來協助減少花在記憶體回收的暫停時間。
如果 Java 資料堆變得近乎飽和,並且只收回非常少量的可回收的記憶體時, 對於新物件的要求便可能無法立即滿足,因為並沒有立即可用的空間。 如果資料堆在操作時其容量接近飽和,則不論使用的是上述的何種選項, 應用程式的效能可能會變糟;而且,如果持續要求更多的資料堆空間, 應用程式便會收到「記憶體不足」的異常狀況,如果無法掌握及處理這個異常狀況, 便會造成 JVM 的終止。此時,JVM 會產生一個 Javadump 診斷檔案。 在這些狀況下,建議您使用 -Xmx 選項來增加資料堆的大小,或是減少使用中應用程式物件的數目。
當發出有關 JVM 的信號時,就會呼叫信號處理程式。 此信號處理程式會針對 Java 或非 Java 執行緒來進行呼叫。
如果信號是針對 JVM 執行緒,JVM 就會控制信號處理作業。如果已經有安裝此信號的應用程式處理程式, 但是您沒有指定 -Xnosigchain 指令行選項,則在 JVM 完成處理程序後, 將會呼叫此信號的應用程式處理程式。
如果信號是針對非 Java 執行緒,且安裝 JVM 的應用程式之前已安裝它自己的信號處理, 則控制會傳給該處理程式。不然的話,如果是 JVM 或 Java 應用程式提出信號要求, 該信號會被忽略,或採取預設的動作。
針對異常狀況和錯誤信號,JVM 會:
針對岔斷信號,JVM 也會輸入受控制的關機程序, 但此時它會被視為正常終止;其動作為:
此關機方式與呼叫 Java 方法 System.exit() 所起始的關機方式相同。
JVM 使用的其他信號作為內部控制用途,不會造成終止。 唯一有關的控制信號是 SIGQUIT, 它會導致 Javadump 產生。
下列表 1 顯示 JVM 使用的信號。 表格中,依類型或用途分類信號,如下所示:
信號名稱 | 信號類型 | 說明 | 透過 -Xrs 來停用 |
---|---|---|---|
SIGBUS | 異常狀況 | 不正確存取記憶體(資料不符) | 否 |
SIGSEGV | 異常狀況 | 不正確存取記憶體(寫入無法存取的記憶體) | 否 |
SIGILL | 異常狀況 | 不合法指令(嘗試呼叫不明的機器指令) | 否 |
SIGFPE | 異常狀況 | 浮點數異常(除數為零) | 否 |
SIGABRT | 錯誤 | 異常終止。JVM 一偵測到 JVM 錯誤就發出此信號。 | 否 |
SIGINT | 岔斷 | 互動式岔斷 (CTRL-C)。JVM 正常結束。 | 是 |
SIGTERM | 岔斷 | 終止要求。JVM 將正常結束。 | 是 |
SIGHUP | 岔斷 | 關機。JVM 正常結束。 | 是 |
SIGQUIT | 控制 | 終端機的退出信號。JVM 會使用此信號來取得 Javadumps。 | 否 |
SIGPIPE | 控制 | 中斷管道。設為 SIG_IGN | 否 |
請使用 -Xrs(減少使用信號)選項來防止 JVM 處理太多信號。 如需詳細資訊,請參閱 Sun 的 Java 應用程式啟動程式網頁,網址是: http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html。
在 JVM 執行緒上的信號 1 (SIGHUP)、2 (SIGINT)、 4 (SIGILL)、7 (SIGBUS)、8 (SIGFPE)、11 (SIGSEGV) 和 15 (SIGTERM) 等,都會導致 JVM 關閉; 因此,應用程式信號處理程式不應該嘗試從這些信號回復,除非已不再需要使用 JVM 服務。
Runtime Environment 包含信號鏈結。信號鏈結可讓 JVM 更有效率地與安裝了專屬信號處理程式的原生程式碼相互作用。
信號鏈結可讓應用程式在系統程式庫之前, 先鏈結和載入共用的程式庫 libjsig.so。libjsig.so 程式庫可以確保一定截取到 signal()、sigset() 及 sigaction() 等呼叫, 不讓它們的處理程式取代 JVM 的信號處理程式。這些呼叫會改成儲存新的信號處理程式,或將它們「鏈結」在 JVM 安裝的處理程 式後面。稍後,一旦發出這些信號但發現不是針對 JVM 所發出的,則會呼叫預先安裝的處理程式。
若要使用 libjsig.so:
gcc -L$JAVA_HOME/bin -ljsig -L$JAVA_HOME/bin/j9vm -ljvm java_application.c或
export LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (bash and ksh) setenv LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (csh)(假設 JAVA_HOME 已設定;否則,請使用 /opt/IBMJava2-142/jre。)
如果您安裝的信號處理程式使用 sigaction(),則 JVM 在使用信號時不會注意到部 份的 sa_flags。包括:
libjsig.so 程式庫也會隱藏 JVM 信號處理程式,讓應用程式察覺不到。 因此,在 JVM 啟動之後執行的 signal()、sigset() 及 sigaction() 等呼叫不再傳回 JVM 信號處理程式的參照,改傳回 JVM 啟動之前所安裝的任何一個處理程式。
預設為,不啟用 RMI 連線處理程式的執行緒儲存池。
若要 RMI TCPTransport 層次實作的連線儲存池,請設定選項
-Dsun.rmi.transport.tcp.connectionPool=true(或任何非空值)
本版 Runtime Environment 不提供讓您限制連線儲存池中執行緒數目的任何設定。
相關資訊請參閱 Sun 網站:http://java.sun.com.
若要取得 IBM 建置和版本號碼,請在 Shell 提示下輸入:
java -version
在非浮動堆疊的 Linux 系統上,不管 -Xss 的設定為何, 系統一律針對每一個執行緒提供 256 KB 的最小原始堆疊大小。 在浮動堆疊 Linux 系統上,則是採用 -Xss 值。 因此,如果是從非浮動堆疊的 Linux 系統移轉,您必需確定 -Xss 值夠大,就不需仰賴最小值 256 KB。
在雙位元組字集 (DBCS) 系統,如果要切換輸入法,您應使用 java.util.prefs.Preferences 類別,而不要使用 IBMJAVA_INPUTMETHOD_SWITCHKEY 和 IBMJAVA_INPUTMETHOD_SWITCHKEY_MODIFIERS 環境變數。相關細節,請參閱 Sun 的輸入法組織架構規格。
開發好產品且準備要傳送之後,您必須將產品安裝到使用者系統中、配置使用者系統來支援您的軟體,以及配置 Runtime Environment。
如果您使用 Runtime Environment for Linux, 您必須確定安裝程序沒有改寫現存的安裝結構(除非現存的 Runtime Environment for Linux 是舊的版本)。
如果要重新發行 Runtime Environment for Linux, 您可以將它安裝在自己的系統上,再將必要的 Runtime Environment 檔複製到安裝集中。如果您選擇這種方式,您必須併入 Runtime Environment for Linux 所提供的所有檔案。 您必須併入所有檔案,才能重新發行 Runtime Environment for Linux 軟體。事實上,當您的應用程式出貨時,它會有自己的一份 Runtime Environment for Linux 複本。
如果需要必須重新發行之檔案的相關資訊,請參閱產品所檢附的授權合約。
以下幾節說明 Runtime Environment for Linux 的已知限制。
由下列各項的最小值決定可用的最大執行緒數目:
不過,在到達最大執行緒數目之前,可能會先用完虛擬儲存體。
xmodmap -pk這就是為何 SDK 將 Meta + Alt 視為同時按下的理由。 您可以在 Shell 提示中輸入下列指令來移除 Meta_x 映射,作為解決方案:
xmodmap -e "keysym Alt_L = Alt_L" -e "keysym Alt_R = Alt_R"
如果您對於本「使用手冊」的效用或其他方面有任何的批評指教,歡迎您使用下列其中一種管道將您的意見提供給我們參考。 請注意,這些管道的設立並不是為了要回答技術上的疑問,而只是為了要取得有關文件的意見。請使用下列方法來傳送您的意見:
細則。 選擇傳送訊息給 IBM 即代表您同意訊息中包含的所有資訊,包括回應資料,如問題、意見、建議,或類似資料,均得視為非機密資訊,而且,關於此類資訊,IBM 並無任何義務,且 IBM 得自由重製、使用、公開及散佈此等資訊予他人,不受任何限制。此外,IBM 亦得自由將此種資訊中所含的任何想法、概念、知識或技術用於任何用途,包括但不限於開發、製造及行銷包含此種資訊的產品。
本資訊乃是針對在美國提供的產品及服務而撰寫。IBM 可能不會在其他國家提供本文件討論的產品、服務或功能。要知道在您所在之區是否可用到這些產品與服務時, 請向當地的 IBM 服務代表查詢。本書在提及 IBM 的產品、程式或服務時,不表示或暗示只能使用 IBM 的產品、程式或服務。只要未侵犯 IBM 的智慧財產權,任何功能相當的產品、程式或服務都可以取 代 IBM 的產品、程式或服務。不過,其他非 IBM 產品、程式或服務在運作上的評價 與驗證,其責任屬於使用者。
在這文件中包含著 IBM 所擁有之專利或暫准專利。使用者不享有本文件內容之專利權。您可以用書面方式來查詢授權,來函請寄到:
若要查詢有關二位元組 (DBCS) 資訊的特許權限事宜, 請聯絡您國家的 IBM 智慧財產部門,或者用書面方式寄到:
下列段落若與該國之法律條款抵觸,即視為不適用:
IBM 僅以現狀提供本書,而不提供任何明示或默示之保證(包括但 不限於可商用性或符合特定效用的保證)。有些地區在某些固定的交易上並不接受明示或默示保證的放棄聲明,因此此項 聲明不見得適用於您。
本資訊中可能會有技術上或排版印刷上的訛誤。因此,IBM 會定期修訂; 並將修訂後的內容納入新版中。同時,IBM 得隨時改進及(或)變動本資訊中所 提及的產品及(或)程式。
本資訊中任何對非 IBM 網站的敘述僅供參考,IBM 對該網站並不提供保證。該網站上的資料,並非本 IBM 產品所用資料的一部分,如因使用該網站 而造成損害,其責任由 貴客戶自行負責。
IBM 得以各種適當的方式使用或散佈由 貴客戶提供的任何資訊,而無需對您負責。
本程式之獲授權者若希望取得相關資料, 以便使用下列資訊者可洽詢 IBM。其下列資訊指的是: (1) 獨立建立的程式與其他程式(包括此程式)之間更換資訊的方式; (2) 相互使用已交換之資訊方法。 若有任何問題請聯絡:
上述資料得遵循適當條款而取得,在某些情況下必須付費方得使用。
IBM 基於雙方之「IBM 客戶合約」、「國際程式授權合約」或任何同等合約之條款,提供本文件中所述之授權程式與其所有適用的授權資料。
任何此處涵蓋的執行效能資料都是在一個受控制的環境下決定出來的。因此,若在其他作業環境下,所得的結果可能會大大不同。有些測定已在開發階段系統上做過, 不過這並不保證在一般系統上會出現相同結果。再者,有些測定可能已透過推測方式評估過。但實際結果可能並非如此。本書的使用者應依自己的特定環境,查證適用的資料。
本書所提及之非 IBM 產品資訊,係一由產品的供應商,或其出版的聲明或其他公開管道取得。IBM 並未測試過這些產品,也無法確認這些非 IBM 產品的執行效能、相容性或任何對產品的其他主張是否完全無誤。如果您對非 IBM 產品的性能有任何的疑問,請逕向該產品的供應商查詢。
IBM 是 International Business Machines Corporation 在美國及(或)其他國家或地區的商標。
Java 以及所有以 Java 為基礎的商標及標誌圖都是 Sun Microsystems, Inc. 在美國及(或)其他國家或地區的商標或註冊商標。
Linux 是 Linus Torvalds 在美國及(或)其他國家或地區的商標。
其他公司、產品或服務名稱,可能是第三者的商標或服務標誌。
本產品包含由 Apache Software Foundation http://www.apache.org/ 所開發之軟體。