附註:在使用本資訊及其支援的產品之前,請務必閱讀注意事項下的一般資訊。
這一版的「使用手冊」適用於:
以及所有後續版次與修正,直到新修訂版中另有指示為止。
(c) Copyright Sun Microsystems, Inc. 1997, 2004, 901 San Antonio Rd., Palo Alto, CA 94303 USA. All rights reserved.
(c) Copyright International Business Machines Corporation, 1999, 2005. All rights reserved.
U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
本「使用手冊」中提供有關 IBM(R) SDK and Runtime Environment for Linux(TM) platforms, Java(TM) 2 Technology Edition 5.0 版的一般資訊,以及 IBM 實作與 Sun 實作之任何差異的相關特定資訊。請同時參閱本「使用手冊」以及 Sun 網站上內容更廣泛的文件:http://java.sun.com。
如需已測試 SDK 及 Runtime Environment for Linux 的發行版清單,請參閱:http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html。
Diagnostics Guide 提供關於 IBM Virtual Machine for Java 的詳細資訊。
本「使用手冊」中交替使用 "Runtime Environment" 和 "Java Virtual Machine" 兩個術語。
檢視本 5.0 版「使用手冊」的 HTML 版本或彩色印行本時,對其技術上的變更(非次要或明顯之變更,如將 "1.4.2" 更新為 "5.0")均以紅字標明,且在變更處左側也會加上垂直線。
IBM SDK 是一套開發環境,適合撰寫與執行符合 IBM Java 5.0 核心應用程式設計介面 (API) 的 Applet 和應用程式。
此 SDK 包含 Runtime Environment for Linux,只能讓您執行 Java 應用程式。 如果您已安裝 SDK,Runtime Environment 也會包含在其中。
Runtime Environment 包含 Java Virtual Machine,支援的檔案包括無法除錯的 .so 檔案及類別檔。Runtime Environment 只包含 SDK 的一部分類別,可讓您在執行時期支援 Java 程式,但不允許您編譯 Java 程式。Runtime Environment for Linux 不含任何開發工具,例如 appletviewer 或 Java 編譯器 (javac),或開發系統專用的類別。
此外,對於 IA32、PPC32 及 AMD64/EM64T 平台,也提供 Java Communications 應用程式設計介面 (API) 套件,可搭配 Runtime Environment for Linux 一起使用。您可以在 使用 Java Communications API (JavaComm) 中找到它的相關資訊。
license_xx.html 檔案包含 Runtime Environment for Linux 軟體的授權合約 (xx 是語言縮寫)。若要檢視或列印授權合約,請在 Web 瀏覽器中開啟此檔案。
在整本「使用手冊」中,SDK 的預設安裝目錄是 /opt/ibm/java2-i386-50/。下列平台各有不同的預設安裝目錄; 當您看到 /opt/ibm/java2-i386-50/ 時,請依據您使用的平台更換為適合的目錄:
通常,以舊版 SDK 開發的任何 Applet 或應用程式,都應該可以在 IBM SDK for Linux 5.0 版 中正確執行。但不保證以這個版本編譯的類別一定可以在舊版本中執行。
如需閱讀 Sun 的相容性文件,請造訪 Sun 網站 http://java.sun.com。
如果您要從舊版升級 SDK,請先備份所有配置檔和安全原則檔,再開始升級。
在升級之後,您可能必須還原或重新配置這些檔案,因為它們可能已在升級程序期間被覆寫。請在還原原始檔之前,先檢查新檔案的語法,因為檔案的格式或選項可能已變更。
在 AMD64/EM64T 1.4.2 版和其他 Linux 平台第 5 版,IBM Runtime Environment for Linux 包含新版的 IBM Java Virtual Machine 和 Just-In-Time (JIT) 編譯器。如果您從更舊版的 IBM Runtime Environment 移轉,請注意:
zSeries 31 位元和 64 位元 SDK 及 Runtime Environments 在下列的 System z9 和 zSeries 伺服器或對等系統上執行: |
|SDK 包含數個開發工具和一個 Java Runtime Environment (JRE)。本節說明 SDK 工具和 Runtime Environment 的內容。
完全以 Java 撰寫的應用程式不應該依附於 IBM SDK 的目錄結構(或這些目錄中的檔案)。對 SDK 目錄結構(或這些目錄中的檔案)的任何相依性,將導致應用程式的 可攜性問題。
附註:此 SDK for Linux 提供的文件只有這本「使用手冊」、Javadoc 及隨附的授權、版權檔案和 demo 目錄。您可以造訪 Sun 網站來檢視 Sun 的軟體文件,或從 Sun 網站下載 Sun 的軟體文件套件: http://java.sun.com。
您可以從 RPM 或 .tgz 檔安裝 IBM Java SDK 和 Runtime Environment。除非您要容許機器上的所有使用者存取這項 Java 安裝,否則請使用 .tgz 安裝方法。如果您沒有最高存取權,請使用 .tgz 檔。
如果您使用 RPM 檔進行安裝,Java 檔案會安裝在 /opt/ibm/java2-i386-50/ 中。本手冊中的範例是假設您將 Java 安裝在這個目錄中。
SDK 視依預設不安裝的 Red Hat Enterprise Linux (RHEL) 4.0 共用程式庫而定。
包含這些程式庫的 RPM 有:
若要在 RHEL 4 安裝期間併入這些程式庫:
若要執行 SDK,您必須安裝 SDK 所需的所有正確版本的程式庫,可分 32 位元或 64 位元。
|在 RHEL4 中,相容性架構支援套件群組中提供 64 位元版本的套件。
|您可以使用 RPM 工具來檢查您安裝了哪些版本的套件,方法為將選項 --queryformat "%{NAME}.%{ARCH}\n" 新增至 RPM 指令。例如: |
|/home/username : rpm --queryformat "%{NAME}.%{ARCH}\n" -q libstdc++ |libstdc++.x86_64 |libstdc++.i386
|rpm -ivh ibm-java2-<arch>-sdk-5.0-0.0.<arch>.rpm
或
|rpm -ivh ibm-java2-<arch>-jre-5.0-0.0.<arch>.rpm
|其中 <arch> 代表您的架構:i386、x86_64、ppc、ppc64、s390 或 s390x。
|tar -zxvf ibm-java2-sdk-50-linux-<arch>.tgz
或
|tar -zxvf ibm-java2-jre-50-linux-<arch>.tgz
|其中 <arch> 代表您的架構:i386、x86_64、ppc、ppc64、s390 或 s390x。
請注意,如果您變更 PATH 環境變數,如下所述,您將會置換路徑中現有的任何 Java 執行檔。
安裝 SDK 之後,您可以在 Shell 提示下鍵入工具的名稱,並以檔案名稱為引數,來執行工具。
您每次可以在工具名稱前面鍵入路徑,指定工具的路徑。比方說,如果 SDK for Linux 安裝在 /opt/ibm/java2-i386-50/bin,您可以 在 Shell 提示下鍵入下列指令,編譯檔案 myfile.java:
/opt/ibm/java2-i386-50/bin/javac myfile.java
若要變更 PATH 環境變數:
export PATH=/opt/ibm/java2-i386-50/bin:/opt/ibm/java2-i386-50/jre/bin:$PATH
CLASSPATH 會指示 SDK 工具 (例如 java、javac 及 javadoc)到何處尋找 Java 類別庫。
只有在下列其中一種狀況下,您才您需要明確設定 CLASSPATH:
若要顯示 CLASSPATH 的現行值,請在 Shell 提示下鍵入:
echo $CLASSPATH
如果打算開發和執行使用不同執行時期環境的應用程式,包括您另外安裝的其他版本,您必須明確設定每一個應用程式的 CLASSPATH(及 PATH )。如果打算同時執行多個應用程式,且使用不同的執行時期環境,則每一個應用程式必須在自己的 Shell 中執行。
如果您一次只要執行一個 Java 版本,您可以使用 Shell Script 來切換不同的執行時期環境。
您移除 SDK 及 Runtime Environment for Linux 所用的程序視您使用的安裝類型而定。請參閱解除安裝 Red Hat Package Manager (RPM) 套件或解除安裝壓縮的 Tape Archive (TAR) 套件以取得指示。
若要解除安裝 SDK 或 Runtime Environment for Linux(如果您安裝了可安裝的 RPM 套件):
rpm -qa | grep -i java
ibm-java2-<arch>-jre-5.0-0.0.<arch> ibm-java2-<arch>-sdk-5.0-0.0.<arch>
rpm -e ibm-java2-<arch>-jre-5.0-0.0.<arch> rpm -e ibm-java2-<arch>-sdk-5.0-0.0.<arch>
若要解除安裝 SDK 或 Runtime Environment for Linux(如果您解壓縮了壓縮的 TAR 套件):
java 工具會經由啟動 Java Runtime Environment 並載入指定的類別來啟動 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 標題來表示啟動類別。
啟動器具有一組現行執行時期環境可支援且未來版次中也會支援的標準選項。此外,還有一組非標準選項。在一般的使用上,已選擇預設選項以取得最佳效果。在決定進行變更時,應考量情況。
您可以用 3 種不同的方式來指定 Java 選項和系統內容。它們是(按照優先順序):
指令行最右邊的選項優先於最左邊的選項; 比方說,如果您指定選項 -Xint -Xjit myClass,則以 -Xjit 為優先。
下列 -X 選項不是標準選項,隨時可能變更,而不另行通知。
在使用 <size> 參數的選項中,您應該在數字尾端加上 "k" 或 "K" 來表示 KB、加上 "m" 或 "M" 來表示 MB,或是加上 "g" 或 "G" 來表示 GB。
若要取得 IBM 建置和版本號碼,請在 Shell 提示下鍵入:
java -version
java 指令及其他 java 啟動程式指令 (例如 javaw)允許用現行語言環境字集中的任何字元來指定類別名稱。
您也可以使用 Java 脫序字元,在類別名稱和引數中指定任何 Unicode 字元。作法是必須指定 -Xargencoding。如需指定 Unicode 字元,請以 \u#### 形式使用脫序字元,該形式中的 # 為十六進位數字(0 至 9,A 至 F)。
另外,若要指定類別名稱和指令引數以 UTF8 編碼,請使用 -Xargencoding:utf8,或者,在 ISO8859_1 編碼中,請使用 -Xargencoding:latin。
例如,若要指定類別 "HelloWorld",且對其中兩個大寫字母以 Unicode 編碼,您可以使用此指令:
java -Xargencoding '\u0048ello\u0057orld'
java 和 javaw 指令提供經過翻譯的輸出訊息。這些訊息視執行 Java 的語言環境而有所不同。Java 傳回的詳細錯誤說明及其他除錯資訊是英文。
在 Java 應用程式和 Applet 的執行期間,IBM Just-In-Time (JIT) 編譯器會為常用的位元組碼序列動態產生機器碼。|JIT 5.0 版編譯器帶來嶄新的最佳化,這是進行編譯器研究、改善在舊版 JIT 中實作的最佳化,以及提供較佳硬體開發的成果。
IBM SDK 和 Runtime Environment 包含 JIT,這在使用者應用程式及 SDK 工具中已預設啟用。通常,並不需要另行呼叫 JIT;Java 位元組碼會自動編譯成機器碼。不過如果您在執行 Java 應用程式或 Applet 時遇到 Runtime Environment 的問題,可以停用 JIT 來協助找出問題。停用 JIT 應只是暫時的措施; 需要 JIT 才能有適當的效能。
有三種方式可以停用 JIT:
在指令提示下鍵入:
export JAVA_COMPILER=NONE
(本使用手冊的其餘部分會使用 Korn Shell 指令。)
JAVA_COMPILER=NONE
export JAVA_COMPILER
setenv JAVA_COMPILER NONE
java -Djava.compiler=NONE MyApp
java -Xint MyApp
這兩個指令行選項都會置換 JAVA_COMPILER 環境變數。
若要另行啟用 JIT,請將 JAVA_COMPILER 環境變數設為 "jitc",或是使用 -D 選項,將 java.compiler 內容設為 "jitc"。另外,可在 JVM 指令行上使用 -Xjit 選項(並省略 -Xint 選項)來開啟 JIT。
如果 JAVA_COMPILER 環境變數或 java.compiler 內容設為 ""(空字串),則 JIT 會保留停用狀態。若要適當地取消設定環境變數, 在 Shell 提示上鍵入 unset JAVA_COMPILER。
若要判斷 JIT 是否已啟用,請在指令提示下鍵入:
java -version
如果目前未使用 JIT,畫面上會顯示下列訊息:
(JIT disabled)
如果正在使用 JIT,畫面上會顯示下列訊息:
(JIT enabled)
如需 JIT 的相關資訊,請參閱 Diagnostics Guide。
「記憶體回收器」管理 VM 內執行的 Java 和應用程式所用的記憶體。
當「記憶體回收器」收到儲存體要求時,將從資料堆撥出未使用的儲存體 -「配置」。「記憶體回收器」也會檢查不再參照的記憶體區域,並釋放出來重複使用 -「回收」。
回收階段可由記憶體配置錯誤來觸發(在沒有剩餘空間可因應儲存體要求時),或由 explicit System.gc() 呼叫來觸發。
記憶體回收會明顯影響應用程式效能,所以 IBM 虛擬機器提供各種方法,對記憶體回收的運作方式做最佳的安排,藉以降低應用程式受影響的程度。
如需記憶體回收的相關資訊,請參閱 Diagnostics Guide。
-Xgcpolicy 選項指定記憶體回收原則。
-Xgcpolicy 使用下列值:optthruput(預設值及建議值)、optavgpause|、subpool|(僅限 PPC 和 zSeries) 或 gencon。該選項會控制記憶體回收器的行為,在應用程式和整體系統的產能以及因記憶體回收所造成的暫停時間之間找出平衡點。
該選項及其值的格式為:
-Xgcpolicy:optthruput
-Xgcpolicy:optavgpause
-Xgcpolicy:gencon
|
-Xgcpolicy:subpool(僅限 PPC 和 zSeries)
當應用程式嘗試建立一個物件,但資料堆中的可用空間無法立即滿足要求時,記憶體回收器便會負責來識別未參照的物件(可回收的記憶體)、刪除它們,並讓資料堆返回到可以快速滿足即時及後續配置要求的狀態。這種記憶體回收循環偶而會造成應用程式碼意外地暫停。當應用程式的大小及複雜度增加時,資料堆隨之變大。此記憶體回收暫停時間的大小及有效位數也會有增加的趨勢。 預設的記憶體回收值 -Xgcpolicy:optthruput 對應用程式提供非常高的產能,缺點是可能出現這些偶而的暫停現象,可能從幾毫秒到許多秒的時間,視資料堆大小和回收數量而定。
JVM 利用兩項技術來短縮暫停時間:
-Xgcpolicy:optavgpause 指令行選項要求使用並行記憶體回收,以明顯縮短記憶體回收暫停的時間。並行 GC 會在程式正常執行的同時執行一些記憶體回收活動,讓資料堆回收所造成的破壞程度降到最低,藉以縮短暫停時間。-Xgcpolicy:optavgpause 選項也會限制記憶體大小增加對於記憶體回收暫停時間長短的影響。-Xgcpolicy:optavgpause 選項在具有大量堆疊的配置中非常有用。隨著暫停時間縮短,應用程式的產能可能也會稍微降低。
在並行記憶體回收期間,許多時間浪費在辨別無法回收的長久物件上。如果 GC 只專注在最可能回收的物件上,則可以進一步縮短部份應用程式的暫停時間。世代 GC 將資料堆分割成「培育區 (nursery)」和「正式區 (tenure)」兩個「世代」來達成這個目標。物件視經歷時間放入其中一個區域。培育區較小,存放剛出現不久的物件;正式區較大,存放出現較久的物件。物件會先分配到培育區內,如果存活時間夠長,最後會晉升到正式區。
世代 GC 假設大部份物件不會存活太久。世代 GC 專注於回收培育區的儲存體,因為此區空間最有可能回收,藉以縮短暫停時間。培育區回收次數較頻繁,且不是偶而暫停一下,而是長時間暫停來回收整個資料堆,如果培育區很小,暫停時間就會很短。然而,世代 GC 的缺點是經過一段時間之後,如果太多物件存活太久,正式區即可能飽和。在此情況下,為了縮短暫停時間,請結合並行 GC 與世代 GC 一起 使用。-Xgcpolicy:gencon 選項要求結合並行與世代 GC 一起使用,以縮短任何記憶體回收暫停的時間。
如果 Java 資料堆變得近乎飽和,並且只收回非常少量的可回收的記憶體時,對於新物件的要求便可能無法立即滿足,因為並沒有立即可用的空間。如果資料堆在操作時其容量接近飽和,則不論使用的是上述的何種選項,應用程式的效能可能會變糟;而且,如果持續要求更多的資料堆空間,應用程式便會收到「記憶體不足」的異常狀況,如果無法掌握及處理這個異常狀況,便會造成 JVM 的終止。在此情況下,JVM 會產生 "javadump" 診斷檔案。在這些狀況下,建議您使用 -Xmx 選項來增加資料堆的大小,或是減少使用中應用程式物件的數目。如需相關資訊,請參閱 Diagnostics Guide。
當發生 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。 | 是 |
|SIGTRAP (5) | |控制 | |由 JIT 使用。 | |是 |
|__SIGRTMAX - 2 | |控制 | |由 SDK 使用。 | |否 |
|SIGCHLD | |控制 | |由 SDK 作為內部控制之用。 | |否 |
請使用 -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 更有效率地納入已安裝自己的信號處理程式的原生程式碼。
在系統程式庫載入之前,信號鏈結可讓應用程式先鏈結和載入共用程式庫 .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 和 ksh) setenv LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (csh)(假設 JAVA_HOME 已設定;否則,請使用 /opt/ibm/java2-i386-50/jre。)
如果您安裝的信號處理程式使用 sigaction(),則 JVM 在使用信號時不會注意到部 份的 sa_flags。包括:
libjsig.so 程式庫也會隱藏 JVM 信號處理程式,讓應用程式無法查覺。因此,在 JVM 啟動之後執行的 signal()、sigset() 及 sigaction() 等呼叫不再傳回 JVM 信號處理程式的參照,改傳回 JVM 啟動之前所安裝的任何一個處理程式。
特定的 Linux 程式模組散布 - 例如 Red Hat - 已啟用一項 GLIBC 功能,稱為「浮動堆疊 (floating stack)」。由於 Linux Kernel 的限制,如果核心層次小於 2.4.10,則 JVM 無法在啟用浮動堆疊的 SMP 上執行。在此環境下,必須在 JVM 或任何啟動 JVM 的應用程式啟動之前停用浮動堆疊。在 Red Hat 上,請使用此指令匯出環境變數來停用浮動堆疊:
export LD_ASSUME_KERNEL=2.2.5
在無浮動堆疊的 Linux 系統上,不論 -Xss 如何設定,每一個執行緒的原生堆疊大小至少保證為 256 KB。在浮動堆疊的 Linux 系統上,則以 -Xss 值為準。因此,如果您從無浮動堆疊的 Linux 系統移轉,您必須確定任何 -Xss 值夠大,不要依賴最小值 256 KB。
IBM SDK 中提供符合 JAXP 1.3 規格的 XSLT4J 處理器和 XML4J 剖析器。不論 XML 處理的實作方式,這些工具可讓您獨立剖析和轉換 XML 文件。利用 "Factory Finders" 來尋找 SAXParserFactory、 DocumentBuilderFactory 及 TransformerFactory 實作方式,您的應用程式可以切換為不同的實作方式,不必變更任何程式碼。
|IBM SDK 內含的 XML 技術類似 |Apache Xerces Java 和 Apache Xalan Java。請參閱 http://xml.apache.org/xerces2-j/ 和 http://xml.apache.org/xalan-j/ 以取得相關資訊。
XSLT4J 處理器可讓您選擇原始的 XSLT「直譯」處理器或 新的 XSLT「編譯」處理器。「直譯」處理器特別針對開發和除錯環境而設計,支援 XSLT「編譯」處理器未支援的 XSLT 延伸功能。XSLT「編譯」處理器針對高效能執行時期環境而特別設計; 可產生轉換引擎或從 XSL 樣式表轉換。這種方式將樣式表指令的解譯從執行時期抽出成為 XML 資料。
XSLT「直譯」處理器是預設的處理器。若要選取 XSLT「編譯」處理器,您可以:
若要實作 jaxp.properties 檔案中的內容,請將 jaxp.properties.sample 複製到 /opt/ibm/java2-i386-50/中的 jaxp.properties。關於 TransformerFactory、SAXParserFactory 及 DocumentBuilderFactory 使用哪些實作方式,此檔案也包含決定程序的完整資料。
若要改進以 XSLT「編譯」處理器來轉換 StreamSource 物件時的效能,請指定 com.ibm.xslt4j.b2b2dtm.XSLTCB2BDTMManager 類別,做為 org.apache.xalan.xsltc.dom.XSLTCDTMManager 服務的提供者。若要決定服務提供者,請嘗試每一個步驟,直到找到 org.apache.xalan.xsltc.dom.XSLTCDTMManager 為止:
在建立 javax.xml.transform.TransformerFactory 物件時,XSLT「編譯」處理器 會偵測 org.apache.xalan.xsltc.dom.XSLTCDTMManager 服務的服務提供者。使用該 TransformerFactory 物件建立的任何 javax.xml.transform.Transformer 或 javax.xml.transform.sax.TransformerHandler 物件,將使用相同的服務提供者。您只能經由修改上述其中一項設定,再建立新的 TransformerFactory 物件,如此才能變更服務提供者。
如果您使用舊版的 Tomcat,可能有下列限制。
如果您使用舊版的 Xerces(2.0 之前)或 Xalan(2.3 之前),當您啟動應用程式時,可能會發生 Null 指標異常狀況。發生此異常狀況是因為這些舊版本無法正確處理 jaxp.properties 檔案。
若要避免這種狀況,請採取下列其中一項暫行解決方法:
export IBM_JAVA_OPTIONS=-Djavax.xml.parsers.SAXParserFactory=
org.apache.xerces.jaxp.SAXParserFactoryImpl
或
export IBM_JAVA_OPTIONS=-Djavax.xml.parsers.DocumentBuilderFactory=
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
或
export IBM_JAVA_OPTIONS=-Djavax.xml.transform.TransformerFactory=
org.apache.xalan.processor.TransformerFactoryImpl
下列章節說明使用 SDK for Linux 來開發 Java 應用程式的相關資訊。如需可用工具的詳細資料,請參閱 SDK 工具。
若要對 Java 程式進行除錯,您可以使用 Java 除錯器 (JDB) 應用程式,或其他利用 SDK for Linux 提供的 Java 平台除錯器架構 (JPDA) 來通訊的除錯器。
SDK for Linux 包含 Java 除錯器 (JDB)。此除錯器由 jdb 指令呼叫;可利用 JPDA 來「附加」至 JVM。若要進行 Java 應用程式除錯:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<port> MyApp <MyApp args>
jdb -attach <port number>
除錯器將附加至 JVM,而您現在可以發出一連串指令來檢查和控制
Java 應用程式;例如,鍵入 run 來執行 Java 應用程式。如需 JDB 選項的詳細資訊,請鍵入:
jdb -help
如需 JDB 指令的詳細資訊:
您也可以使用 JDB 對在遠端機器上執行的 Java 應用程式進行除錯; JPDA 使用 TCP/IP 通訊端來連接至遠端 JVM。
jdb -attach <machine name or ip address>:<port number>
當您使用 dt_socket 傳輸啟動除錯階段作業時,請確定指定的埠可用。
|此版本不支援「Java Virtual Machine 除錯介面 (JVMDI)」。它已由支援「Java Virtual Machine 工具介面 (JVMTI)」所取代。
如需 JDB 和 JPDA 及其用法的相關資訊,請造訪下列網站:
某些 Java 應用程式必須能夠判定目前是在 32 位元 JVM 或 64 位元 JVM 上執行。比方說,如果應用程式包含原生的程式碼庫,則程式庫必須分別以 32 和 64 位元格式編譯,以滿足支援 32 和 64 位元作業模式的平台。在此情況下,應用程式必須在執行時期載入正確的程式庫,因為 32 和 64 位元程式碼無法混合。
系統內容 com.ibm.vm.bitmode 可讓應用程式判定執行 JVM 的模式。傳回值如下:
在應用程式碼中,您可以利用下列呼叫來檢查 com.ibm.vm.bitmode:
System.getProperty("com.ibm.vm.bitmode");
原生程式在 JNI_CreateJavaVM() API 呼叫上可以指定的有效 JNI 版本號碼為:
此版本號碼只決定要使用的 JNI 原生介面的層次。實際建立的 JVM 層次由 J2SE 程式庫指定(亦即 5.0 版)。JNI 介面 API 不影響由 JVM、類別庫 API 或 JVM 行為的其他任何方面所實作的語言規格。如需進一步資訊,請參閱 http://java.sun.com/j2se/1.5.0/docs/guide/jni。
如果您的應用程式需要兩個 JNI 程式庫,一個用於 32 位元,另一個用於 64 位元,請利用 com.ibm.vm.bitmode 系統內容,決定您是否在 32 位元或 64 位元 JVM 下執行,並選擇適當的程式庫。
若要編譯和鏈結原生的應用程式與 IBM 5.0 SDK,請使用下列指令:
gcc -I/opt/ibm/java2-i386-50/include -L/opt/ibm/java2-i386-50/jre/bin/j9vm -ljvm -ldl -lpthread <JNI program filename>
-ljvm 選項指定 libjvm.so 為實作 JVM 的 共用程式庫。-lpthread 選項表示您使用原生的 pthread 支援; 如果您不與 pthread 程式庫鏈結,則在執行 JNI 程序時,可能會造成分區段錯誤(信號 SIGSEGV)。
com.ibm.jvm 套件中增加四個新的 IBM 專用 SDK 類別,在阻斷的連接器上可支援執行緒層次的回復。新的類別都封裝在 core.jar 中。
|這些類別可讓網路或同步呼叫上阻斷的執行緒消除障礙。如果應用程式未使用這些類別,則無法只中斷個別阻斷的執行緒,必須結束整個程序。
|這些類別如下:
|InterruptibleLockContext 和 InterruptibleIOContext 兩者會參照現行執行緒。因此,如果您不使用 InterruptibleThread,則必須經由延伸 java.lang.Thread 來提供自己的類別,才能使用這些新的類別。
|這些類別的 Javadoc 隨 SDK 一起提供,位於檔案 docs/apidoc.zip 中。
利用 Applet 檢視器,您可以執行一或多個 Applet,這些 Applet 在網頁中(HTML 檔案)使用 APPLET 標韱透過傳址方式呼叫。Applet 檢視器會在 HTML 檔案中尋找 APPLET 標韱,根據標韱的指示,在個別的視窗中執行 Applet。
因為 Applet 檢視器主要用來檢視 Applet,無法完整呈現包含許多 HTML 標籤的整個網頁。只是剖析 APPLET 標籤,並不處理網頁上的其他 HTML。
若要使用 Applet 檢視器來執行 Applet,請在 Shell 提示下鍵入:
appletviewer name
其中 name 是下列其中一項:
例如,若要在呼叫 Applet 的 HTML 檔上呼叫 Applet 檢視器,請在 Shell 提示下鍵入:
appletviewer $HOME/filename.html
其中 filename 是 HTML 檔的名稱。
例如,http://java.sun.com/applets/NervousText/example1.html 是呼叫 Applet 的網頁 URL。若要在此網頁上呼叫 Applet 檢視器,請在 Shell 提示下鍵入:
appletviewer http://java.sun.com/applets/NervousText/example1.html
Applet 檢視器無法辨識 <META> 標籤的 charset 選項。如果 appletviewer 載入的檔案未以系統預設值編碼,則可能發生 I/O 異常狀況。若要避免異常狀況,請在執行 appletviewer 時使用 -encoding 選項。例如:
appletviewer -encoding JISAutoDetect sample.html
您可以使用 Applet 檢視器的 -debug 選項進行 Applet 除錯。進行 Applet 除錯時,建議您依據呼叫此 Applet 的 HTML 檔所在的目錄,從這個目錄中呼叫 Applet 檢視器。例如:
cd demo/applets/TicTacToe ../../bin/appletviewer -debug example1.html
關於如何使用 Applet 檢視器進行 Applet 除錯的說明文件,請造訪 Sun 網站:http://java.sun.com。
| | |在支援大型分頁的系統上,您可以利用 -Xlp 選項啟動 Java 來啟用大型分頁支援。
|大頁面主要是針對配置了大量記憶體且經常會對其存取的應用程式來改善其使用效能。大頁面之所以能夠改善效能,主要是因為「分頁對照表 (Translation Lookaside Buffer, TLB)」 |中遺漏數目減少的緣故。TLB 會對映較大的虛擬記憶體範圍,藉以改善情況。
|大型分頁支援必須由核心提供並啟用,才能讓 Java 使用大型分頁。
|若要配置大頁面記憶體配置,請先確定運作核心能夠支援大頁面。檢查檔案 /proc/meminfo 中是否含有下列字行: |
|HugePages_Total: <頁數> |HugePages_Free: <頁數> |Hugepagesize: <分頁大小,KB>
可用的頁數及其大小視發行套件而定。
|如果核心未提供大型分頁支援,則 /proc/meminfo 檔案中不會有這幾行。在此情況下,您必須安裝新的核心,內含大型分頁的支援。
|如果具有大型分頁支援,但尚未啟用,則 HugePages_Total 等於 0。在此情況下,管理者必須啟用大型分頁支援。如需詳細指示,請參閱您的作業系統手冊。
|若要讓 JVM 使用大型分頁,系統必須有足夠的連續大型分頁可用。如果無法配置大型分頁,即使有足夠的分頁可用,則可能表示大型分頁不連續。配置開機時的大型分頁數目可以建立連續的分頁。
|JVM 必須具有 root 存取權,才能順利配置大型分頁。若要使用大型分頁,請以 root 身分執行 Java 或設定 Java 執行檔的 suid 位元。
Java 2 Platform, Standard Edition (J2SE) 至少支援 Official Specifications for CORBA support in J2SE(1.5 版) 中定義的規格。在某些情況下,IBM J2SE ORB 支援最新版的規格。
根據 OMG 文件 formal/99-10-07 CORBA 2.3.1 規格的第 13 章和第 15 章的定義,此 SDK 支援所有 GIOP 版本,您可以從下列網址取得這份文件:
http://www.omg.org/cgi-bin/doc?formal/99-10-07
不支援雙向 GIOP。
根據 OMG 文件 ptc/01-03-04 的定義,此 SDK 支援「可攜性攔截程式」,您可以從下列網址取得這份文件:
http://www.omg.org/cgi-bin/doc?ptc/01-03-04
「可攜性攔截程式」是插入 ORB 中的追蹤點,ORB 服務可以藉此截取 ORB 的正常執行流程。
根據 OMG 文件 ptc/00-08-07 的定義,此 SDK 支援「互用性名稱服務」,您可以從下列網址取得這份文件:
http://www.omg.org/cgi-bin/doc?ptc/00-08-07
在未指定 ORBInitialPort 參數的情況下,「暫時命名伺服器」(tnameserv 指令)使用的預設埠已從 900 改為 2809,此為向 IANA(網際網路指派號碼機構)註冊做為 CORBA 命名服務的埠號。依賴此預設值的程式可能需要更新,才能搭配此版本正常運作。
從「暫時命名伺服器」傳回的起始環境定義,現在是 org.omg.CosNaming.NamingContextExt。目前將參照縮短為環境定義 org.omg.CosNaming.NamingContext 的程式仍然有效,不需要重新編譯。
ORB 支援「互用性名稱服務」規格定義的 -ORBInitRef 和 -ORBDefaultInitRef 參數,且 ORB::string_to_object 運算現在支援「互用性名稱服務」規格定義的 ObjectURL 字串格式 (corbaloc: 和 corbaname:)。
OMG 指定使用 ORB::register_initial_reference 這個方法向「互用性名稱服務」註冊服務。但 Sun Java 核心 API 5.0 版不提供這個方法。需要在現行版本中註冊服務的程式,必須在 IBM 內部 ORB 實作類別上呼叫此方法。例如,若要註冊服務 "MyService":
((com.ibm.CORBA.iiop.ORB)orb).register_initial_reference("MyService", serviceRef);
其中 orb 是從 ORB.init() 傳回的 org.omg.CORBA.ORB 的 實例,serviceRef 是連接到 ORB 的 CORBA 物件。這只是暫時性機制,與未來版本不相容或無法移植到非 IBM ORB。
執行時期除錯特性提供改進的服務功能。您可能會發覺這在問題診斷方面很有用,IBM 服務人員也可能對此提出要求。追蹤由三個系統內容來控制。
例如,若要追蹤事件和格式化的 GIOP 訊息,請鍵入:
java -Dcom.ibm.CORBA.Debug=true -Dcom.ibm.CORBA.CommTrace=true myapp
請勿在一般作業上啟用追蹤,因為可能導致效能退化。即使您已停止追蹤,FFDC(首次失敗資料擷取)仍然繼續運作,所以只會報告嚴重的錯誤。如果產生除錯輸出檔,請細查檔案來檢查問題。例如,伺服器可能未執行 ORB.shutdown() 就停止。
追蹤輸出的內容和格式可能隨著版本而有所不同。
下列內容可協助您調整 ORB:
例如,若要將片段大小設為 4096 位元組:
java -Dcom.ibm.CORBA.FragmentSize=4096 myapp
預設的片段大小是 1024 位元組。您可以將片段大小設為 0 來停用片段化。
java -Dcom.ibm.CORBA.RequestTimeout=30 -Dcom.ibm.CORBA.LocateRequestTimeout=30 myapp
依預設,ORB 會無限期地等待回應。請勿將逾時值設得太低,以避免連線不必要地結束。
例如,若要讓 ORB 使用埠號 1050,請鍵入:
java -Dcom.ibm.CORBA.ListenerPort=1050 myapp
如果設定這個內容,則 ORB 起始之後會立即開始接聽。否則,只會在必要時才開始接聽。
在 Java 2 SecurityManager 之下執行時,呼叫 CORBA API 類別中的某些方法可能會執行許可權檢查,因而導致 SecurityException。受影響的方法包括:
類別/介面 | 方法 | 必要許可權 |
---|---|---|
org.omg.CORBA.ORB |
init |
java.net.SocketPermission resolve |
org.omg.CORBA.ORB |
connect |
java.net.SocketPermission listen |
org.omg.CORBA.ORB |
resolve_initial_references |
java.net.SocketPermission connect |
org.omg.CORBA. portable.ObjectImpl |
_is_a |
java.net.SocketPermission connect |
org.omg.CORBA. portable.ObjectImpl |
_non_existent |
java.net.SocketPermission connect |
org.omg.CORBA. portable.ObjectImpl |
OutputStream _request (String, boolean) |
java.net.SocketPermission connect |
org.omg.CORBA. portable.ObjectImpl |
_get_interface_def |
java.net.SocketPermission connect |
org.omg.CORBA. Request |
invoke |
java.net.SocketPermission connect |
org.omg.CORBA. Request |
send_deferred |
java.net.SocketPermission connect |
org.omg.CORBA. Request |
send_oneway |
java.net.SocketPermission connect |
javax.rmi. PortableRemoteObject |
narrow |
java.net.SocketPermission connect |
如果您的程式使用以上任何方法,請記得授與必要的許可權給您的程式。
這個版本中的 ORB 實作類別如下:
這些是預設值,建議您不要設定這些內容或直接參照實作類別。為了提高可攜性,請您只參照 CORBA API 類別,不要參照實作。未來版本中可能變更這些值。
Java 遠端方法呼叫 (RMI) 提供簡單的機制來設計分散式 Java 程式。RMI over IIOP (RMI-IIOP) 採用 Common Object Request Broker Architecture (CORBA) 標準的 Internet Inter-ORB Protocol(IIOP 通訊協定),延伸基本 Java RMI 來執行通訊。如此可以直接與其他任何 CORBA Object Request Broker (ORB) 互動,而不論 ORB 是以 Java 或其他程式設計語言來實作。
您可以取得下列文件:
預設為,不啟用 RMI 連線處理程式的執行緒儲存池。
若要 RMI TCPTransport 層次實作的連線儲存池,請設定選項
-Dsun.rmi.transport.tcp.connectionPool=true(或任何非空值)
本版 Runtime Environment 不提供讓您限制連線儲存池中執行緒數目的任何設定。
相關資訊請參閱 Sun 網站:http://java.sun.com.
IBM SDK 包含已強化的雙向支援。如需相關資訊,請參閱 http://www-106.ibm.com/developerworks/java/jdk/bidirectional/index.html。BiDirectional 套件的 Javadoc 隨 SDK 一起提供,位於檔案 docs/apidoc.zip 中。
從 Java 5.0 開始,IBM BigDecimal 類別 |已由 Sun as java.math.BigDecimal 取代。IBM 不再 |維護 com.ibm.math.BigDecimal,已列為即將棄用。建議您將現有的 Java 程式碼移轉為使用 java.math.BigDecimal。
|新的 java.math.BigDecimal 使用的方法同於先前的 java.math.BigDecimal 與 com.ibm.math.BigDecimal。目前使用 java.math.BigDecimal 的程式碼仍然可以正常運作。
|若要將現有的 Java 程式碼移轉為使用 java.math.BigDecimal 類別,請將 Java 檔案開頭的 import 陳述式從原來的 import com.ibm.math.*; 改為 import java.math,*;。
從 2002/1/1 起,對於歐洲貨幣聯盟 (EMU) 的 國家,IBM SDK 和 Runtime Environment 設定歐元為預設貨幣。
若要採用舊的國家貨幣,請在 Java 指令行指定 -Duser.variant=PREEURO。
如果執行 UK、丹麥文或瑞典文語言環境,且想要使用歐元,請在 Java 指令行指定 -Duser.variant=EURO。
Java Communications 應用程式設計介面 (API) 套件 (JavaComm) 是選用性套件,可以搭配 IA32、PPC32/PPC64 及 AMD64/EM64T 平台上的 Runtime Environment for Linux 一起使用。JavaComm 與 SDK 或 Runtime Environment 各自 獨立安裝。
JavaComm API 為 Java 應用程式提供一種可在不同平台執行的方式,讓不同技術之間得以進行序列埠和並列埠通訊,例如語音郵件、傳真及智慧卡。撰寫應用程式的序列埠或並列埠通訊之後,就可以將那些檔案納入應用程式中。
Java Communications API 支援電子業協會 (Electronic Industries Association) (EIA)-232 (RS232) 序列埠和電機電子工程師協會 (Institute of Electrical and Electronics Engineers) (IEEE) 1284 並列埠,且在執行 IBM Version 5.0 Runtime Environment 的系統上也受到支援。
Java Communications API 的用途如下:
在安裝 Java Communications API 之前,請確定已安裝一套 SDK 或 Runtime Environment。
如果您最初使用 RPM 套件來安裝 Java,請從 RPM 檔案安裝 Java Communications API。若要從 RPM 套件安裝 Java Communications API:
rpm -ivh ibm-java2-<arch>-javacomm-5.0-0.0.<arch>.rpm
Java Communications API 會安裝在 /opt/ibm/java2-i386-50/ 目錄結構內。
若要從 .tgz 檔案安裝 Java Communications API:
tar -xvzf ibm-java2-javacomm-50-linux-<arch>.tgz
Java Communications API 會解壓縮到現有 IBMJava2-50 目錄中的子目錄。
安裝的 Java Communications API 檔案如下所示:
如果安裝到預設目錄,則 comm.jar 檔案位於 /opt/ibm/java2-i386-50/jre/lib/ext。
如果將套件安裝到另一個目錄,檔案會放在相同的目錄結構中,但 /opt/ibm/java2-i386-50/ 變成 Java Communications API 的安裝目錄。
安裝 Java Communications API 之後,您必須:
安裝 Java Communications API 之後,您必須變更序列埠和並列埠的存取模式,讓使用者可以存取這些裝置。您必須給予使用者讀寫權限來存取所需的裝置。以 root 身分登入,視情況使用下列指令:
chmod 666 /dev/ttyS0 (亦稱為序列埠 COM1) chmod 666 /dev/lp0 (亦稱為並列埠 LPT1) chmod 666 /dev/ttyS1 (亦稱為序列埠 COM2) chmod 666 /dev/ttyS2 (亦稱為序列埠 COM3) chmod 666 /dev/ttyS3 (亦稱為序列埠 COM4)
這些指令提供讀寫存取權給系統上的每一個人。
另一種方法是建立許可權 660,再將特定使用者新增至裝置所在的群組。例如,在 SUSE 系統上,裝置位於 uucp 群組。因此,使用者可以新增至 uucp 群組來取得裝置的存取權。
視需要變更其他任何埠號的存取模式。
檔案 javax.comm.properties 可讓您指定可供 Java Communications API 使用的裝置的前置詞,以及是否為並列或序列裝置。埠號會循序地配置給所有裝置。比方說,如果您指定 /dev/ttyS=PORT_SERIAL,且裝置 /dev/ttyS0 和 /dev/ttyS1 存在,則會分別配置 COM1 和 COM2。
若要使用 USB 序列接頭,請在 javax.comm.properties 檔案中刪除 /dev/ttyUSB=PORT_SERIAL 這一行的註解符號。如果裝置 /dev/ttyUSB0 和 /dev/ttyUSB1 存在,且已定義 COM1 和 COM2,則 USB 序列裝置會分配到後面的循序埠號:COM3 和 COM4。
依預設,大部分 ThinkPads 在 BIOS 中會停用序列埠。目前,Linux 尚無法啟用這些埠(如果 BIOS 已停用這些埠,tpctl 套件無法啟用埠號)
若要在 BIOS 中啟用埠號,您必須使用 DOS 版的 ThinkPad Configuration 公用程式,可以從 IBM ThinkPad 下載網站取得此公用程式。若要使用 ThinkPad Configuration 公用程式,您需要 DOS 開機磁片。請注意,在 Windows 上,ThinkPad Configuration 公用程式可能已安裝在「ThinkPad 公用程式」中 (視您的安裝選項而定),您可以從 Windows 的命令提示字元中執行此公用程式。
對 Windows 提供的 ThinkPad Configuration 應用程式,提供啟用或停用序列埠和並列埠的選項,但這無法變更 BIOS 中的設定。所以,如果您在 Windows 中使用此應用程式,則可以使用埠號;但在 Linux 上,如果重新開機,則不會啟用埠號。
使用 Java Communications API 來列印時,您可能必須在印表機按下換頁、繼續或類似的按鈕。
您用來解除安裝 Java Communications API 的程序,取決於您是安裝 Red Hat Package Manager (RPM) 可安裝套件或 Tape Archive (TAR) 壓縮套件。
如果是安裝 RPM 可安裝套件,若要解除安裝 Java Communications API:
rpm -e ibm-java2-<arch>-javacomm-5.0-0.0
或者,您也可以利用圖形式工具,例如 kpackage 或 yast2。
如果您是安裝 TAR 壓縮套件,若要解除安裝 Java Communications API,請從安裝目錄中刪除下列檔案:
您可以從 Sun 網站:http://java.sun.com 取 得 Java Communications API 的 API 文件和範例。
Java 外掛程式是一個 Web 瀏覽器外掛程式。如果您使用 Java Plug-in,您可以略過 Web 瀏覽器的預設 JVM,改用您選擇的 Runtime Environment 在瀏覽器中執行 Applet 或 Bean。
您必須讓 Applet 完全載入,以防瀏覽器「當掉」。比方說,在 Applet 載入期間,如果您按上一頁按鈕之後又按下一頁按鈕,則可能無法載入 HTML 網頁。
Sun 網站提供 Java Plug-in 的文件:http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/。
|對於 Linux PPC32,Mozilla 1.6 是支援的瀏覽器。
|若為 Linux IA32,請參閱表 3。
|發行版 | |Netscape 預設版本 | |Netscape 支援版本 | |Mozilla 預設版本 | |Mozilla 支援版本 |
---|---|---|---|---|
|Red Hat Enterprise Linux 3.0 | |- | |7.x | |1.4.2 | |1.4.1、1.4.2、1.7.8、Firefox 1.0.x |
|Red Hat Enterprise Linux 4.0 | |4.8 | |7.x | |1.7.3 | |1.4.1、1.4.2、1.7.8、Firefox 1.0.x |
|SUSE Linux Enterprise Server 9.0 | |- | |7.x | |1.6 | |1.4.1、1.4.2、1.6、1.7.8、Firefox 1.0.x |
|隨 SDK 提供了多個版本的 Java 外掛程式。您應選擇適用於您瀏覽器的版本。最常見的有:
|有一些在以下某些常見瀏覽器上安裝外掛程式的指示。
|您必須以符號方式鏈結外掛程式(而非複製它),讓它可以找出 JVM。
|只有 Mozilla 1.4 版及更新版受支援。
如果要將 Java 外掛程式提供給所有使用者:
cd /usr/local/mozilla/plugins/
ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .
您必須以符號方式鏈結外掛程式(而非複製它),讓它可以找出 JVM。
| | |如果要將 Java 外掛程式提供給所有使用者:
|cd /usr/local/mozilla-firefox/plugins/
ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .|
|您必須以符號方式鏈結外掛程式(而非複製它),讓它可以找出 JVM。
若要安裝和配置 Java Plug-in for Netscape,請建立從程式庫檔 /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so 至瀏覽器 Plug-ins 目錄 (/browser-install-path/plugins) 的符號式鏈結。
cd /usr/local/netscape/plugins/
ln -s /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so .
您必須以符號方式鏈結外掛程式(而非複製它),讓它可以找出 JVM。
您可能會因為某些特定瀏覽器中所存在的限制,而無法實作 org.w3c.dom.html 套件的所有功能。
Java 外掛程式支援以雙位元組字元(例如繁體中文 BIG-5、韓文、日文)作為 <APPLET>、<OBJECT> 及 <EMBED> 標示的參數。您必須選取您的 HTML 文件所適用的正確字元編碼,Java 外掛程式才能剖析參數。 請使用 <HEAD> 區段中的 <META> 標示,指定您 HTML 文件的字元編碼方式,如下所示:
<meta http-equiv="Content-Type" content="text/html; charset=big5">
上例告訴瀏覽器要使用中文 BIG-5 字元編碼來剖析使用中的 HTML 檔案。所有的參數都會正確傳送到 Java 外掛程式。但是,某些舊版瀏覽器可能無法正確暸解這個標示。在這種情況中,您可以強制瀏覽器忽略這個標示,不過您可能需手動更改編碼。
您可以指定您想用來剖析 HTML 檔案的編碼:
您可以使用 Java Web Start 來部署 Java 應用程式。Web Start 可讓使用者 直接從 Web 啟動和管理應用程式。利用 Java Web Start,您可以輕易從 Web 啟動應用程式,確信執行最新的版本,免除安裝或升級程序。Java Web Start 不必讓您下載和安裝軟體,避開冗長的安裝選項。
|除了 http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources 說明的 java-vm-args 之外,Web Start 也支援以 -Xgcpolicy 設定記憶體回收原則。
如需支援 Web Start 的瀏覽器的相關資訊,請參閱支援的瀏覽器。
如需 Web Start 的相關資訊,請參閱 http://java.sun.com/products/javawebstart 和 http://java.sun.com/j2se/1.5.0/docs/guide/javaws/index.html。如需部署應用程式的相關資訊,請參閱 http://java.sun.com/j2se/1.5.0/docs/guide/deployment/index.html。
當您使用 .rpm 或 .tgz 套件安裝 Java 時,也會自動安裝 Java Web Start 5.0 版。
|如果您從 .tgz 套件解壓縮 Java,請執行 jre/lib/javaws/updateSettings.sh |Shell Script,更新系統上的 .mailcap 和 .mime.types 檔案。
您有三種方式可以呼叫 Web Start:
應用程式下載之後會儲存在「Java 應用程式快取」中。再次存取應用程式時,如果有最新版本,Java Web Start 會下載最新版的應用程式,如果沒有,則會使用快取的版本。
如果 .jnlp 檔案中發生錯誤(例如,標記名稱無效)Web Start 會失敗,但不會顯示錯誤訊息。
Java 應用程式不同於 Java Applet,不能依賴 Web 瀏覽器來執行安裝和使用執行時期服務。當您移轉 Java 應用程式時,您的套裝軟體可能包括下列元件:
使用者需要 Runtime Environment for Linux,才能執行您的 應用程式。SDK for Linux 軟體包含 Runtime Environment。然而,您不能 假設使用者一定已經安裝 SDK for Linux 軟體。
您的 SDK for Linux 軟體授權不允許伴隨您的應用程式來重新分送 SDK 的任何檔案。您應該確定目標電腦上已安裝 SDK for Linux 授權版本。
| | |IBM Virtual Machine (VM) 可讓您將 bootstrap 和應用程式類別儲存在共用記憶體的快取中,然後在 VM 之間共用。多個 VM 共用一個快取時,類別共用可以降低整體虛擬記憶體的用量。在建立快取之後,類別共用也可以縮短 VM 的啟動時間。共用的類別快取和任何作用中的 VM 互相獨立,且存活時間超過啟動快取的 VM 的生命期限。
| |IBM SDK 可讓您儘量共用類別,但不會對使用者造成影響。
| |共用的類別快取中包含唯讀的靜態類別資料和說明類別的 Meta 資料。任何 VM 都可以讀取或更新快取。共用的 VM 必須是相同版本。您必須小心注意是否使用執行時期位元組碼修正(請參閱執行時期位元組碼修正)。
| |因為共用的類別快取的存活時間比任何 VM 的生命期限更長,快取會動態更新,以反映對於檔案系統上的 JAR 或類別的任何可能的修改。動態更新讓應用程式不受快取的影響。
| |啟動 VM 時,請使用 -Xshareclasses 選項來啟用類別共用,讓 VM 連接現有的快取,或者,如果快取不存在,則建立一個快取。VM 載入的所有 bootstrap 和應用程式類別,依預設會共用。自訂的類別載入器如果繼承應用程式類別載入器,則會自動共用; |否則,必須使用 VM 提供的 Java Helper API 來存取快取(請參閱改寫類別載入器來共用類別)。
| |對共用類別快取的存取權受限於作業系統許可權和 Java 安全許可權。依預設,會建立具有使用者存取權的共用類別快取,除非使用了 groupAccess 指令行子選項。只有已向共用類別登錄的類別載入器可以將類別新增至共用類別快取。如果已安裝 Java SecurityManager,則必須將 SharedClassPermissions 新增至 java.policy 檔,來授予類別載入器(預設 bootstrap、應用程式及延伸類別載入器除外)對共用類別的許可權。(請參閱使用 SharedClassPermissions)。RuntimePermission "createClassLoader" 限制建立新的類別載入器,因此也限制了對快取的存取權。
| |一個系統上可以存在多個快取,且在 -Xshareclasses 指令的子選項中以名稱指定。一個 VM 一次只能連接一個快取。您可以在啟動時使用 -Xscmx<n>[k|m|g] 指定快取大小,爾後,在快取的整個生命期限內,此大小就固定不變。快取會一直存在,直到以 -Xshareclasses 指令的子選項來明確摧毀為止,或一直到系統重新開機為止。
| |所有快取公用程式都是 -Xshareclasses 指令的子選項。請利用 -Xshareclasses:help 來查看可用的子選項清單。
| |類別共用是透過 -Xshareclasses 和 -Xscmx 指令行選項來啟用和配置。
|若要啟用類別共用,請將 -Xshareclasses[:name=<name>] 新增至應用程式指令行。VM 將連接指定名稱的現有快取,或以該名稱建立新的快取。如果已建立新的快取,則會移入所有正在載入的 bootstrap 和應用程式類別,直到快取滿載為止。如果有兩個以上的 VM 同時啟動,則全部會同時移入快取。
|若要檢查是否已建立快取,請執行 java -Xshareclasses:listAllCaches。若要查看有多少類別和多少類別資料正在共用,請執行 java -Xshareclasses:[name=<name>],printStats。(這些公用程式可以在應用程式 VM 終止之後或在另一個指令視窗中執行)
|若要查看正在從快取載入或儲存在快取中的類別,請將 -Xshareclasses:[name=<name>],verbose 新增至應用程式指令行。
|若要刪除已建立的快取,請執行 java -Xshareclasses:[name=<name>],delete。只有當快取包含太多過時類別時,或快取已飽和且您想要建立更大的快取時,才應該刪除快取。
|建議您針對特定的應用程式調整快取記憶體大小,因為預設值未必是最理想的大小。決定最理想的快取記憶體大小的最好方法,是指定一個大型的快取記憶體(使用 -Xscmx)、執行應用程式,然後使用 printStats 來判定已儲存了多少類別資料。請在 printStats 中顯示的值中加入一小量以防意外。請注意,由於您可以在 VM 的生命週期期間隨時載入類別,因此最好是在應用程式終止之後才執行這項分析。不過,飽和快取對於與其連接的任何 VM 的效能或容量沒有負面的影響,因此決定採用小於所需大小的快取記憶體大小是蠻恰當的。
|如果快取變成飽和,則會有一則訊息輸出到所有使用該快取之 VM 的指令行,同時它們會將所有其他的類別載入它們自己的處理記憶體中。飽和快取內的類別仍然可以繼續共用,但飽和快取會變成唯讀,無法再以新的類別更新。
| |在有多個 VM 執行相似程式碼的系統上,類別共用特別有用,因為可以降低系統的虛擬記憶體用量。在經常啟動和關閉 VM 的系統上,也很有用,因為可以縮短啟動時間。
|建立和移入新快取的額外負荷非常小。單一 VM 的 VM 啟動時間成本通常在 0 到 5% 之間,視載入多少類別而定。藉由移入的快取而縮短 VM 開機時間的改善程度,通常在 10% 到 40% 之間,視您的作業系統和載入的類別數量而定。多個 VM 並行執行,會使整體啟動時間縮短。
|以類別共用來執行應用程式時,您可以利用作業系統工具,查看虛擬記憶體用量降低的成效。
| |共用類別的快取是使用 System |V IPC 共用記憶體機制來配置。
|理論上,最大快取記憶體大小為 2GB。您可以指定的快取記憶體大小受限於系統可用的實體及分頁空間量。
|由於共用類別快取與 Java 資料堆之間會共用程序的虛擬位址空間,因此增加 Java 資料堆的大小上限,會縮減您可以建立的共用類別快取大小。
|快取大小由 SHMMAX 設定來限制,此設定會限制可配置的共用記憶體數量。您可以查看 /proc/sys/kernel/shmmax 檔案來檢查這些設定。SHMMAX 通常設為 30MB。
| |如果 VM 使用會修改位元組碼的 JVMTI 代理程式,則無法共用類別,除非在指令行使用 modified=<modified_context> 子選項(請參閱以上說明)。修改的環境定義是使用者指定的描述子,說明執行的修改類型。使用已修改的特定環境定義的所有 VM,必須以可預期、可重複的方式修改每一個類別的位元組碼,讓儲存在快取中已修改的類別由另一個 VM 載入時,具有預期的修改結果。任何修改必須可預期,理由是從共用類別快取中載入的類別,無法再由代理程式修改。請注意,修改過和未修改的位元組碼可以同時儲存在相同的快取中。如需此主題的相關資訊,請參閱 Diagnostics Guide。
| |對於可執行 32 位元和 64 位元應用程式的作業系統,不允許在 32 位元和 64 位元之間共用類別。listAllCaches 子選項會列出 32 位元或 64 位元快取,視使用的 VM 的位址模式而定。
|共用類別快取需要磁碟空間來儲存系統上存在之快取的識別資訊。這項資訊儲存在 /tmp/javasharedresources。如果刪除識別資訊目錄,VM 將無法識別系統上的共用類別,必須重建快取。請利用 ipcs 指令來檢視 VM 或應用程式使用的憶體區段。
|執行 JVM 的使用者必須在相同的群組中,才能使用共用類別快取。存取共用類別快取的許可權由作業系統強制實施。如果不指定快取名稱,則使用者名稱會附加至預設名稱,因此,相同系統上的多位使用者依預設會建立自己的快取。
| |如果 SecurityManager 與類別共用一起使用,而執行中的應用程式使用其自己的類別載入器,則必須授予 SharedClassPermissions 給這些類別載入器,它們才可以共用類別。您應使用類別載入器類別名稱(允許使用萬用字元)以及 "read"、"write" 或 "read,write" 來決定授予的存取權,將 SharedClassPermissions 加入 java.policy 檔。例如:
|permission com.ibm.oti.shared.SharedClassPermission "com.abc.customclassloaders.*", "read,write";
如果類別載入器沒有正確的 SharedClassPermission,卻試圖共用類別,則會擲出 AccessControlException。您無法變更或縮減預設 bootstrap、應用程式或延伸類別載入器的許可權。
| |大部分 Java 應用程式會使用 VM 本身的類別載入器,或有繼承 java/net/URLClassLoader 的自訂類別載入器。使用這些類別載入器的應用程式,可以自動共用 bootstrap 和應用程式類別。未繼承 java/net/URLClassLoader 的自訂類別載入器,需要修改才能使用類別共用。如果正在使用 SecurityManager,則將必須授予 SharedClassPermissions 給所有的自訂類別載入器; |請參閱使用 SharedClassPermissions。IBM 依自訂類別載入器的各種類型提供數個 Java 介面,可讓類別載入器在共用類別快取中尋找和儲存類別。這些類別在 com.ibm.oti.shared 套件中。這個套件的 Javadoc 隨 SDK 一起提供,位於檔案 docs/apidoc.zip 中。關於如何使用這些介面的相關資訊,請參閱 Diagnostics Guide。
如果您依據 IBM Solutions Developer Program 享有該「計劃」規範的服務,請透過一般聯絡方式或 Web http://www-1.ibm.com/partnerworld/ 來聯絡 IBM Solutions Developer Program。
如果您已購買服務合約(亦即 IBM 的 Personal Systems Support Line 或不同國家內的同等服務),則該服務合約的條款已規定您享有該「計劃」的什麼服務(如果有的話)。
這套 SDK 和 Runtime Environment 提供的「使用手冊」已利用螢幕助讀員測試過。您可以利用螢幕助讀員來閱讀這些使用手冊,例如 Home Page Reader 或 JAWS 螢幕助讀員。
若要變更使用手冊的字型大小,請利用瀏覽器提供的功能,通常是在檢視功能表選項之下。
對於需要鍵盤導覽的使用者,"Swing Key Bindings" 提供 Swing 應用程式的實用按鍵說明,網址是 http://www-128.ibm.com/developerworks/java/jdk/additional/
|除了 GUI 之外,iKeyman 工具還提供指令行工具 IKEYCMD,其功能與 iKeyman GUI 相同。IKEYCMD 可讓您管理金鑰、憑證及憑證要求。當應用程式需要增加憑證和金鑰管理作業的自訂介面時,您可以在使用的原生 Shell Script 和程式中呼叫 IKEYCMD。IKEYCMD 可以為 iKeyman 目前支援的所有類型建立金鑰資料庫檔。IKEYCMD 也可以建立憑證要求、匯入 CA 已簽章的憑證及管理自簽憑證。
若要執行 IKEYCMD 指令,請輸入:
java [-Dikeycmd.properties=<properties file>]com.ibm.gsk.ikeyman.ikeycmd <object> <action> [options]
其中:
如需相關資訊,請參閱 iKeyman 使用手冊,其位於下列網址:http://www.ibm.com/developerworks/java/jdk/security/index.html。
如果您利用游標鍵來遍訪 JComboBox 元件的下拉清單,則在選取項目之前,組合框的按鈕或可編輯欄位的值不會變更。此為這個版中想要達成的行為,確保鍵盤遍訪行為和滑鼠遍訪保持一致,提高存取性和實用性。
在協助工具和使用性方面,IBM Java Web Start 5.0 版比舊版的改善之處更多,包括對螢幕助讀員提供更好的支援及改良的鍵盤導覽。
您只能使用指令行來啟動支援 Web Start 的 Java 應用程式。若要變更喜好設定選項,您必須編輯使用者起始目錄中的配置檔 .java/.deployment/.deployment.properties。編輯此檔案之前,請先備份。「Java 應用程式快取檢視器」中可設定的喜好設定,並非全部都包含在配置檔中。
以下幾節說明 SDK 和 Runtime Environment for Linux 的已知限制。
若要使用 JAVA_HIGH_ZIPFDS 環境變數,請將它設為一個介於 0 到 512 之間的值。然後 JVM 會使用最多 1024 的檔案描述子開啟第一個 jar 檔。比方說,如果您的程式可能載入 300 個 jar 檔:
|export JAVA_HIGH_ZIPFDS=300 | |則會使用檔案描述子 724 到 1023 載入前 300 個 jar 檔。在之後開啟的任何 jar 檔都會在正常範圍內開啟。
由下列各項的最小值決定可用的最大執行緒數目:
不過,在到達最大執行緒數目之前,可能會先用完虛擬儲存體。
xmodmap -pk這就是為何 SDK 將 Meta + Alt 視為同時按下的理由。您可以在 Shell 提示中輸入下列指令來移除 Meta_x 映射,作為解決方案:
xmodmap -e "keysym Alt_L = Alt_L" -e "keysym Alt_R = Alt_R"
所建立的 VM 都是由出現的 Java 程式庫決定(亦即,1.2.2、1.3.x、1.4.x、5.x),而不是指傳遞之 JNI 介面版本所包含的 VM。
介面版本不會影響 VM 行為中可供原始程式碼使用的函數以外的任何區域。
已針對這個問題提出了 SUSE Bugzilla 報告 47947。這個錯誤已在 SLES 9 Service Pack 1 中修正。
節點記憶體交錯 BIOS 設定必須設為 DISABLED。否則,可能發生無法預期的結果,包括 Java 毀損及當掉。這項指示符合 AMD 的建議事項。
下列限制適用於 Linux zSeries 64 位元的中國和台灣使用者:
如果您對於本「使用手冊」的效用或其他方面有任何的批評指教,歡迎您使用下列其中一種管道將您的意見提供給我們參考。請注意,這些管道的設立並不是為了要回答技術上的疑問,而只是為了要取得有關文件的意見。請使用下列方法來傳送您的意見:
補充說明。 選擇傳送訊息給 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、iSeries、pSeries 和 zSeries 是 International Business Machines Corporation 在美國及(或)其他國家或地區的商標或註冊商標。
Intel 是 Intel Corporation 在美國及(或)其他國家的商標。
Java 以及所有以 Java 為基礎的商標及標誌圖都是 Sun Microsystems, Inc. 在美國及(或)其他國家或地區的商標或註冊商標。
Linux 是 Linus Torvalds 在美國及(或)其他國家的商標。
其他公司、產品或服務名稱,可能是第三者的商標或服務標誌。
本產品有一部分是以 FreeType Project 的成果為基礎。關於 Freetype 的詳細資訊,請參閱 http://www.freetype.org。
本產品包含由 Apache Software Foundation http://www.apache.org/ 所開發之軟體。