IBM 32-bit SDK and Runtime Environment for Windows, Java 2 Technology Edition 5.0 版

使用手冊


版權資訊

附註:在使用本資訊及其支援的產品之前,請務必閱讀注意事項下的一般資訊。

這一版的「使用手冊」適用於 IBM 32-bit SDK and Runtime Environment for Windows, Java 2 Technology Edition 5.0 版及所有後續版次、修正及服務增補,除非新修訂版中另有指示。

(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) 32-bit SDK and Runtime Environment for Windows(R), Java(TM) 2 Technology Edition 5.0 版的一般資訊,以及 IBM 和 Sun 之間任何實作差異的特定資訊。請同時參閱本「使用手冊」以及 Sun 網站上內容更廣泛的文件:http://java.sun.com

下列產品支援 SDK 和 Runtime Environment:

請注意:只有在 Windows XP 和 Windows Server 2003 上才支援 IPv6。

Diagnostics Guide 提供 IBM Virtual Machine for Java 的詳細資訊。

對於此 5.0 版使用手冊的技術變更(非次要或明顯變更,例如從 "1.4.2" 更新為 "5.0"),在 HTML 或彩色印刷版中檢視時,均以紅色字體標明,並於變更處左側加上垂直線。

本「使用手冊」中交替使用 "Runtime Environment" 和 "Java Virtual Machine" 兩個術語。

目錄

版權資訊
前言
概觀
版本相容性
SDK 升級
移轉自其他 IBM JVM
SDK 和 Runtime Environment 的內容
Runtime Environment 工具
SDK 工具
安裝和配置 SDK 與 Runtime Environment
安裝之前
手動式(互動式)安裝作業
安裝套件
將 Runtime Environment 安裝為系統 Java Virtual Machine
無人式安裝
啟用 IBM Accessibility Bridge
停用 Java Accessibility 支援
對於歐洲語言使用者的資訊
設定 PATH
設定 CLASSPATH
解除安裝
使用 Runtime Environment
選項
指定 Java 選項和系統內容
標準選項
非標準選項
取得 IBM 建置和版本號碼
Java 指令的全球化
自動執行 Java 檔案
使用原生協助技術來執行 Java 應用程式
Just-In-Time (JIT) 編譯器
停用 JIT
啟用 JIT
判斷 JIT 是否已啟用
指定記憶體回收原則
記憶體回收選項
暫停時間
減少暫停時間
資料堆近乎飽和的環境
JVM 如何處理信號
JVM 使用的信號
鏈結原生程式碼驅動程式與信號鏈結程式庫
轉換 XML 文件
使用舊版的 Xerces 或 Xalan
使用 SDK 開發 Java 應用程式
Java 應用程式除錯
Java 除錯器 (JDB)
判定應用程式在 32 位元或 64 位元 JVM 上執行
撰寫 JNI 應用程式
使用 Applet
使用 Applet 檢視器執行 Applet
使用 Applet 檢視器進行 Applet 除錯
| |
配置大頁面記憶體配置
CORBA 支援
對 GIOP 1.2 的支援
對可攜性攔截程式的支援
對互用性名稱服務的支援
用來追蹤 ORB 的系統內容
用來調整 ORB 的系統內容
ORB 的 Java 2 安全許可權
ORB 實作類別
RMI over IIOP
實作 RMI 連線處理程式儲存池
已強化的雙向支援
已強化的 BigDecimal
歐元符號支援
使用 Java Communications API (JavaComm)
安裝 Java Communications API
配置 Java Communications API
Java Communications API 列印限制
解除安裝 Java Communications API
Java Communications API 文件
部署 Java 應用程式
使用 Java 外掛程式
支援的瀏覽器
Common Document Object Model (DOM) 支援
使用 DBCS 參數
使用 Web Start
執行 Web Start
移轉 Java 應用程式
| |
在 JVM 之間共用類別資料
| |
類別共用概觀
| |
快取內容
| |
快取的動態更新
| |
啟用類別共用
| |
快取安全
| |
快取有效期限
| |
快取公用程式
| |
使用指令行選項來共用類別
| |
建立、移入、監視及刪除快取
| |
效能和記憶體用量
| |
使用類別共用的限制和考量
| |
快取大小的限制
| |
執行時期位元組碼修正
| |
作業系統限制
| |
使用 SharedClassPermissions
| |
改寫類別載入器來共用類別
獨立軟體供應商的服務和支援
協助工具
iKeyman 協助工具
在 Swing 的 JComboBox 元件中執行鍵盤遍訪
Web Start 協助工具
關於安全性的一般注意事項
已知限制
對於本「使用手冊」是否有任何意見?
注意事項
商標

概觀

IBM SDK 是一套開發環境,適合撰寫與執行符合 IBM Java 5.0 核心應用程式設計介面 (API) 的 Applet 和應用程式。

此 SDK 包含 Runtime Environment for Windows,只能讓您執行 Java 應用程式。 如果您已安裝 SDK,Runtime Environment 也會包含在其中。

Runtime Environment 包含 Java Virtual Machine,支援的檔案包括類別檔。Runtime Environment 只包含 SDK 的一部分類別,可讓您在執行時期支援 Java 程式,但不允許您編譯 Java 程式。Runtime Environment for Windows 不含任何開發工具,例如 appletviewer.exe 或 Java 編譯器 (javac.exe),或開發系統專用的類別。

此外,也提供 Java Communications 應用程式設計介面 (API) 套件,可搭配 Runtime Environment for Windows 一起使用。您可以在 使用 Java Communications API (JavaComm) 中找到它的相關資訊。

版本相容性

通常,以舊版 SDK 開發的任何 Applet 或應用程式,都應該可以在 IBM 32-bit SDK for Windows 5.0 版 中正確執行。但不保證以這個版本編譯的類別一定可以在舊版本中執行。

|IBM 32-bit SDK for Windows (5.0 版) 是以 Microsoft Visual Studio .NET 2003 建置。

如需閱讀 Sun 的相容性文件,請造訪 Sun 網站 http://java.sun.com

SDK 升級

如果您要從舊版升級 SDK,請先備份所有配置檔和安全原則檔,再開始升級。

在升級之後,您可能必須還原或重新配置這些檔案,因為它們可能已在升級程序期間被覆寫。請在還原原始檔之前,先檢查新檔案的語法,因為檔案的格式或選項可能已變更。

移轉自其他 IBM JVM

5.0 版,IBM Runtime Environment for Windows 包含新版的 IBM Java Virtual Machine 和 Just-In-Time (JIT) 編譯器。如果您從更舊版的 IBM Runtime Environment 移轉,請注意:

SDK 和 Runtime Environment 的內容

SDK 包含數個開發工具和一個 Java Runtime Environment (JRE)。本節說明 SDK 工具和 Runtime Environment 的內容。

完全以 Java 撰寫的應用程式應該依附於 IBM SDK 的目錄結構(或這些目錄中的檔案)。對 SDK 目錄結構(或這些目錄中的檔案)的任何相依性,將導致應用程式的 可攜性問題。Java Native Interface (JNI) 應用程式 會有些輕微的相依性。

Runtime Environment 工具

SDK 工具

附註:此 SDK for Windows 提供的文件只有這本「使用手冊」、Javadoc 及隨附的授權、版權檔案和 demo 目錄。您可以造訪 Sun 網站來檢視 Sun 的軟體文件,或從 Sun 網站下載 Sun 的軟體文件套件: http://java.sun.com

安裝和配置 SDK 與 Runtime Environment

安裝之前

若要安裝 SDK 或 Runtime Environment 套件,請下載相關的安裝套件。請確定您將所有套件都下載到相同的目錄中。手動式(互動式)安裝作業列出 套件和檔案名稱;請勿變更套件的檔案名稱。

開始安裝之前,請確定 C:\WINDOWS\TEMP 目錄中有足夠的空間可供安裝期間使用。安裝期間在 TEMP 目錄中需要的暫時空間數量如下:

如果沒有足夠的暫時空間,安裝程式會產生錯誤並終止安裝。如果有足夠的暫時空間,但卻出現此訊息,請驗證您嘗試安裝的套件是否完整下載。您可以比較套件的檔案大小和套件下載網頁上顯示的檔案大小,藉以驗證是否完整下載。

手動式(互動式)安裝作業

您可以安裝的套件如下:

其他套件以 zip 檔案提供:

安裝套件

  1. 啟動 ibm-java2-sdk-50-win-i386.exe(SDK 適用)或 ibm-java2-jre-50-win-i386.exe(Runtime Environment 專用)。
  2. 遵循安裝精靈的指示。

Runtime Environment 預設會安裝在 C:\Program Files\IBM\Java50\jre 目錄中。

如果您下載 SDK 可安裝套件,您可以選擇是否安裝:

您可以個別地安裝元件或一起安裝。

在安裝精靈中,您會看到下列選項:

將 Runtime Environment 安裝為系統 Java Virtual Machine

在安裝 Runtime Environment 時(SDK 可安裝套件或從 Runtime Environment 可安裝套件),將詢問您是否要將 Runtime Environment 安裝為系統 Java Virtual Machine (JVM)。如果安裝為系統 JVM,安裝程式會將 java.exe 和 javaw.exe 檔案複製到 Windows 系統目錄。如果 Windows 系統目錄中目前已存在 java.exe 或 javaw.exe,則會提示您以最新版本來取代現有的版本。將這些檔案安裝到 Windows 系統目錄,這個 Runtime Environment 會變成系統的預設 JVM。此外,"Current Version" 登錄機碼會設為符合此安裝。

註:
將 Runtime Environment 安裝為系統 JVM 只會將 java.exe 和 javaw.exe 複製到 Windows 系統目錄。不會複製其他執行檔(例如 javac.exe 或 appletviewer.exe)。

無人式安裝

若要建立無人式安裝,您必須先完成手動式安裝作業,並建立回應檔 (setup.iss) 來記錄安裝期間指定的選項。您建立的回應檔必須根據您打算使用的電腦而量身訂做。必要的話,請建立多個回應檔,方便在不同配置的電腦上安裝套件時使用。

若要在安裝的同時建立回應檔,請在命令提示字元下鍵入:

ibm-java2-sdk-50-win-i386 /r

ibm-java2-jre-50-win-i386 /r

視您的 Windows 產品而定,回應檔 (setup.iss) 會建立在 C:\Windows 或 C:\Winnt 目錄中,C: 代表開機磁碟機。

互動式安裝期間可能出現下列訊息:

Another Java Runtime Environment is currently
installed as the System JVM. Select Yes to
overwrite this version or No to exit this
installation.

如果出現此訊息,請選取 No,結束安裝。接著請切換至 Windows 系統目錄,刪除下列兩個檔案:

刪除檔案之後,請利用本節一開始說明的指令,重新執行互動式安裝作業。

在您要執行無人式安裝作業的系統上,將 setup.iss 回應檔複製到 C:\Windows 目錄。複製檔案之後,請在命令提示字元下鍵入:

ibm-java2-sdk-50-win-i386 /s /f1c:\Windows\setup.iss /f2c:\setup.log
ibm-java2-jre-50-win-i386 /s /f1c:\Windows\setup.iss /f2c:\setup.log
註:
  1. /f1/f2 後面沒有空格。
  2. /f1 旗標指定回應檔的 名稱和位置。/f2 旗標指定日誌檔的名稱和位置。

如果安裝順利完成,日誌檔會包含 ResultCode=0 字串。

啟用 IBM Accessibility Bridge

依預設會安裝 IBM Accessibility Bridge 但會停用。若要啟用 IBM Accessibility Bridge,請在 jre/lib 目錄的 Accessibility.properties 檔案中,刪除下列這一行開頭的 # 記號:

#assistive_technologies=JawBridge

下列網站提供此協助工具公用程式的詳細資訊:

http://java.sun.com/products/jfc/accessibility.html

停用 Java Accessibility 支援

對於未提供 Java 輔助技術支援的 Java 應用程式,您可以停用 Java Accessibility 支援,以改善 JVM 載入這些 Java 應用程式時的效能,尤其是透過網路鏈結載入的效能。

若要停用 Java Accessibility 支援,請將 JAVA_ASSISTIVE 環境變數設為 OFF。如果此環境變數設為 OFF,即使在 Accessibility.properties 檔案中啟用輔助技術,例如 JawBridge,也一樣無法使用輔助技術。

對於歐洲語言使用者的資訊

在 Windows 中,一個程序有兩個字碼頁:ANSI(或 Windows)字碼頁和 OEM(或 DOS)字碼頁。

命令視窗通常使用 OEM 字碼頁。Java 主控台輸出會採用 Java 啟動命令視窗中的字碼頁。不過,javaw 指令一律使用 ANSI 字碼頁。請在 java 指令上使用 -Dconsole.encoding 選項,以指定主控台輸出使用的字碼頁。例如,-Dconsole.encoding=Cp1252 讓所有主控台輸出使用 Windows ANSI Latin1 字碼頁 (1252)。

設定 PATH

請注意,如果您變更 PATH 環境變數,如下所述,您將會置換路徑中現有的任何 Java 執行檔。

安裝 SDK 之後,您可以在 Shell 提示下鍵入工具的名稱,並以檔案名稱為引數,來執行工具。

您每次可以在工具名稱前面鍵入路徑,指定工具的路徑。比方說,如果 SDK for Windows 安裝在 C:\Program Files\IBM\Java50\bin,您可以 在指令提示下鍵入下列指令,編譯檔案 myfile.java:

  "C:\Program Files\IBM\Java50\bin\javac" myfile.java

若不要每次鍵入完整路徑:

  1. 將下列目錄新增至 PATH 環境變數:

    如果將 SDK 或 Runtime Environment 安裝在不同目錄,請將 C:\Program Files\IBM\Java50\ 換成您安裝 SDK 或 Runtime Environment 的目錄


  2. 使用 javac 工具來編譯檔案。例如,若要編譯檔案 myfile.java,請在指令提示下鍵入:
      javac myfile.java

    PATH 環境變數可讓 Windows 從任何現行目錄中找到執行檔,例如 javac、java 及 javadoc。若要顯示 PATH 的現行值,請在指令 提示下鍵入:

      echo %PATH%

設定 CLASSPATH

CLASSPATH 會指示 SDK 工具 (例如 javajavacjavadoc)到何處尋找 Java 類別庫。

只有在下列其中一種狀況下,您才您需要明確設定 CLASSPATH

若要顯示 CLASSPATH 的現行值,請在指令 提示下鍵入:

  echo %CLASSPATH%

如果打算開發和執行使用不同執行時期環境的應用程式,包括您另外安裝的其他版本,您必須明確設定每一個應用程式的 CLASSPATH(及 PATH )。如果打算同時執行多個應用程式,且使用不同的執行時期環境,則每一個應用程式必須在自己的命令視窗中執行。

如果您一次只要執行一個 Java 版本,您可以使用批次 Script 來切換不同的執行時期環境。


解除安裝

不論您是使用手動安裝或無人式安裝,若要解除安裝 SDK:

  1. 在 Windows 桌面按兩下我的電腦
  2. 按兩下控制台
  3. 按兩下新增/移除程式
  4. 在清單中按一下 IBM 32-bit SDK for Java 2 5.0 版,然後按一下變更/移除
  5. 按一下確定

此程序會移除 Installer 已安裝的所有套件。但不會移除 Java Communications API 套件(請參閱 Java Communications API) 或從 zip 套件中解壓縮的其他任何檔案。

註:
可能會出現警告訊息,表示未移除全部的檔案、登錄項目或兩者。發出這些警告是因為 Windows 認為某些檔案仍在使用中;這些檔案或登錄項目(或兩者)會在下一次重新開機時移除。

當您在 IBM 32-bit SDK for Windows 5.0 版 及 1.3.1 版或更舊版本之間維護多個安裝版本時,如果您解除安裝舊版,但系統上仍然安裝一個 5.0 版 版本,1.3.1 版解除安裝程式會移除下列登錄機碼及所有子機碼,但 5.0 版版本需要這些機碼,結果造成 5.0 版 安裝無法運作。

因此,解除安裝 1.3.1 版之後,請重新安裝 5.0 版。1.4.0 版及後續任何版本中已修正解除安裝程式的這項限制。

使用 Runtime Environment

java 工具會經由啟動 Java Runtime Environment 並載入指定的類別來啟動 Java 應用程式。

JVM 會在三組位置中搜尋起始類別(及其他使用的類別):bootstrap 類別路徑、 已安裝的延伸項目及使用者類別路徑。您在類別名稱或 Jar 檔名稱後面指定的引數會傳給 main 函數。

javaw 指令同等於 java,不同之處是 javaw 沒有相關聯的主控台視窗。若您不想要出現指令提示視窗,請使用 javawjavaw 啟動程式啟動失敗時會顯示一個包含錯誤資訊的對話框。

javajavaw 指令的語法如下:

java [ 選項 ] 類別 [ 引數 ... ]
java [ 選項 ] -jar 檔案.jar [ 引數 ... ]
javaw [ 選項 ] 類別 [ 引數 ... ]
javaw [ 選項 ] -jar 檔案.jar [ 引數 ... ]

顯示在方括弧內的項目是選用性的。

options
指令行選項。
class
所要呼叫的類別名稱。
file.jar
所要呼叫之 jar 檔案的名稱。它只能配合 -jar 使用。
arguments
傳給 main 函數的引數。

若指定了 -jar 選項,則指名的 JAR 檔案要包含應用程式的類別和資源檔,且以 Main-Class manifest 標題來表示啟動類別。

選項

啟動器具有一組現行執行時期環境可支援且未來版次中也會支援的標準選項。此外,還有一組非標準選項。在一般的使用上,已選擇預設選項以取得最佳效果。在決定進行變更時,應考量情況。

指定 Java 選項和系統內容

您可以用 3 種不同的方式來指定 Java 選項和系統內容。它們是(按照優先順序):

  1. 在指令行上指定選項或內容,例如 java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass
  2. 建立包含選項的檔案,然後在指令行上使用 -Xoptionsfile=<filename> 指定它。
  3. 建立包含選項的環境變數 IBM_JAVA_OPTIONS,例如 set IBM_JAVA_OPTIONS="-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump"

指令行最右邊的選項優先於最左邊的選項; 比方說,如果您指定選項 -Xint -Xjit myClass,則以 -Xjit 為優先。

標準選項

非標準選項

下列 -X 選項不是標準選項,隨時可能變更,而不另行通知。

在使用 <size> 參數的選項中,您應該在數字尾端加上 "k" 或 "K" 來表示 KB、加上 "m" 或 "M" 來表示 MB,或是加上 "g" 或 "G" 來表示 GB。

取得 IBM 建置和版本號碼

若要取得 IBM 建置和版本號碼,請在指令提示下鍵入:

    java -version

Java 指令的全球化

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'

javajavaw 指令提供經過翻譯的輸出訊息。這些訊息視執行 Java 的語言環境而有所不同。Java 傳回的詳細錯誤說明及其他除錯資訊是英文。

自動執行 Java 檔案

若要設定從檔案中自動執行 Java 類別或 jar 檔案,請使用「Windows 檔案總管」的工具 -> 資料夾選項 -> 檔案類型選項。另外,也可以在指令提示上輸入:

assoc .class=javaclass 
ftype javaclass=C:\Program Files\IBM\Java50\jre\bin\java.exe %l %*
註:
  1. %l 是字母 l,而不是數字 1。
  2. 若您的 Java 安裝在 C:\Program Files\IBM\Java50\ 以外的目錄,請取代成您的目錄。

使用原生協助技術來執行 Java 應用程式

Sun 提供 Java Access Bridge 來賦予原生 Windows 協助技術,例如螢幕讀取器,以便在 Java 應用程式中存取 Java Accessibility 支援。這些原生 Windows 協助技術必須能支援呼叫 Java Access Bridge。

從 SUN 所取得的 Java Access Bridge 會包含安裝程式,會將下列五個檔案放在正確的目錄中:access-bridge.jar、jaccess.jar、accessibility.properties、JavaAccessBridge.dll 與 WindowsAccessBridge.dll。IBM 在適當的目錄中提供 jaccess.jar 複本,可以搭配 JawBridge 一起使用。

如果您已啟用 IBM Accessibility Bridge (JawBridge),讓「Windows 2000 放大鏡」可以搭配 Swing 應用程式一起運作,又想要同時啟用 JawBridge 與 Java Access Bridge,請在 accessibility.properties 檔案中編輯下列這一行:

assistive_technologies=com.sun.java.accessibility.AccessBridge, JawBridge

請在開頭插入 # 符號來註銷此行,以停用這兩個橋接。這個網站會告訴您如何下載 Java Access Bridge:

http://java.sun.com/products/jfc/accessibility.html

Just-In-Time (JIT) 編譯器

在 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

有三種方式可以停用 JIT:

這兩個指令行選項都會置換 JAVA_COMPILER 環境變數。

啟用 JIT

若要另行啟用 JIT,請將 JAVA_COMPILER 環境變數設為 "jitc",或是使用 -D 選項,將 java.compiler 內容設為 "jitc"。另外,可在 JVM 指令行上使用 -Xjit 選項(並省略 -Xint 選項)來開啟 JIT。

如果 JAVA_COMPILER 環境變數或 java.compiler 內容設為 ""(空字串),則 JIT 會保留停用狀態。若要適當地取消設定環境變數,請在指令提示上鍵入 set JAVA_COMPILER=

判斷 JIT 是否已啟用

若要判斷 JIT 是否已啟用,請在指令提示下鍵入:

    java -version

如果目前未使用 JIT,畫面上會顯示下列訊息:

(JIT disabled)

如果正在使用 JIT,畫面上會顯示下列訊息:

(JIT enabled)

如需 JIT 的相關資訊,請參閱 Diagnostics Guide

指定記憶體回收原則

「記憶體回收器」管理 VM 內執行的 Java 和應用程式所用的記憶體。

當「記憶體回收器」收到儲存體要求時,將從資料堆撥出未使用的儲存體 -「配置」。「記憶體回收器」也會檢查不再參照的記憶體區域,並釋放出來重複使用 -「回收」。

回收階段可由記憶體配置錯誤來觸發(在沒有剩餘空間可因應儲存體要求時),或由 explicit System.gc() 呼叫來觸發。

記憶體回收會明顯影響應用程式效能,所以 IBM 虛擬機器提供各種方法,對記憶體回收的運作方式做最佳的安排,藉以降低應用程式受影響的程度。

如需記憶體回收的相關資訊,請參閱 Diagnostics Guide

記憶體回收選項

-Xgcpolicy 選項指定記憶體回收原則。

-Xgcpolicy 使用下列值:optthruput(預設值及建議值)optavgpausegencon。該選項會控制記憶體回收器的行為,在應用程式和整體系統的產能以及因記憶體回收所造成的暫停時間之間找出平衡點。

該選項及其值的格式為:

-Xgcpolicy:optthruput

-Xgcpolicy:optavgpause

-Xgcpolicy:gencon

暫停時間

當應用程式嘗試建立一個物件,但資料堆中的可用空間無法立即滿足要求時,記憶體回收器便會負責來識別未參照的物件(可回收的記憶體)、刪除它們,並讓資料堆返回到可以快速滿足即時及後續配置要求的狀態。這種記憶體回收循環偶而會造成應用程式碼意外地暫停。當應用程式的大小及複雜度增加時,資料堆隨之變大。此記憶體回收暫停時間的大小及有效位數也會有增加的趨勢。 預設的記憶體回收值 -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 如何處理信號

當發生 JVM 所要處理的信號時,就會呼叫信號處理程式。此信號處理程式會判斷是 Java 或非 Java 執行緒呼叫它。

如果信號是針對 JVM 執行緒,JVM 就會控制信號處理作業。 如果已安裝此信號的應用程式處理程式,但您未指定 -Xnosigchain 指令行選項,則在 JVM 完成處理之後,將會呼叫此信號的應用程式處理程式。

如果信號是針對非 Java 執行緒,且安裝 JVM 的應用程式之前已安裝它自己的信號處理,則控制會傳給該處理程式。否則,如果 JVM 或 Java 應用程式要求信號,將會忽略信號或採取預設動作。

這項規則在 Windows 上有例外,在 Windows 上,對於外部產生的信號(例如,當您按下 CTRL-BREAK 時),將會建立執行緒來執行信號處理程式。在此情況下,JVM 信號處理程式會執行處理,如果已安裝此信號的應用程式處理程式,但您未指定 -Xnosigchain 指令行選項,則會呼叫此信號的應用程式處理程式。

對於異常狀況和錯誤信號,JVM 的處理如下:

如需撰寫指定上述追蹤點的啟動程式的相關資訊,請參閱:http://www-106.ibm.com/developerworks/java/library/i-signalhandling/。這篇文章雖然是針對 Java 1.3.1 版而撰寫,但也適用於最新的版本。

針對岔斷信號,JVM 也會輸入受控制的關機程序,但此時它會被視為正常終止;其動作為:

此關機方式與呼叫 Java 方法 System.exit() 所起始的關機方式相同。

JVM 使用的其他信號作為內部控制用途,不會造成終止。唯一有關的控制信號是 SIGBREAK,它會導致 Javadump 產生。

JVM 使用的信號

下列表 1 顯示 JVM 使用的信號。信號在表格中依類型或用途分組,如下所示:

表 1. JVM 使用的信號
信號名稱 信號類型 說明 透過 -Xrs 來停用
SIGINT 岔斷 互動式岔斷 (CTRL-C)。JVM 正常結束。
SIGTERM 岔斷 終止要求。JVM 將正常結束。
SIGBREAK 控制 來自終端機的中斷信號。JVM 使用此信號來取得 Javadump。

|IBM JVM 使用 結構化異常狀況來處理 SetConsoleCtrlHandler() API。這些是使用 -Xrs 來停用。Windows 上會忽略 -Xnosigchain

請使用 -Xrs(減少使用信號)選項來防止 JVM 處理太多信號。如需詳細資訊,請參閱 Sun 的 Java 應用程式啟動程式網頁,網址是:http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html

在 JVM 執行緒上,信號 2 (SIGINT)15 (SIGTERM) 會造成 JVM 關閉; 因此,應用程式信號處理程式不應該嘗試回復這個信號,除非不再需要 JVM。

鏈結原生程式碼驅動程式與信號鏈結程式庫

Runtime Environment 包含信號鏈結。信號鏈結可讓 JVM 更有效率地納入已安裝自己的信號處理程式的原生程式碼。

在載入 msvcrt.dll 之前,信號鏈結可讓應用程式先鏈結和載入 共用程式庫 jsig.dll。jsig.dll 程式庫可以確保一定截取到 signal() 的呼叫,不讓它們的處理程式取代 JVM 的信號處理程式。這些呼叫會改成儲存新的信號處理程式,或將它們「鏈結」在 JVM 安裝的處理程式後面。稍後,一旦發出這些信號且發現不是針對 JVM 所發出的,則呼叫預先安裝的處理程式。

若要使用 jsig.dll,將它與建立或內嵌 JVM 的應用程式鏈結起來。

轉換 XML 文件

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 複製到 C:\Program Files\IBM\Java50\中的 jaxp.properties。關於 TransformerFactory、SAXParserFactory 及 DocumentBuilderFactory 使用哪些實作方式,此檔案也包含決定程序的完整資料。

若要改進以 XSLT「編譯」處理器來轉換 StreamSource 物件時的效能,請指定 com.ibm.xslt4j.b2b2dtm.XSLTCB2BDTMManager 類別,做為 org.apache.xalan.xsltc.dom.XSLTCDTMManager 服務的提供者。若要決定服務提供者,請嘗試每一個步驟,直到找到 org.apache.xalan.xsltc.dom.XSLTCDTMManager 為止:

  1. 檢查系統內容 org.apache.xalan.xsltc.dom.XSLTCDTMManager 的設定。
  2. 在檔案 C:\Program Files\IBM\Java50\lib\xalan.properties中,檢查 org.apache.xalan.xsltc.dom.XSLTCDTMManager 內容的值。
  3. 檢查檔案 META-INF\services\org.apache.xalan.xsltc.dom.XSLTCDTMManager 的內容,以查明類別名稱。
  4. 使用預設的服務提供者 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 物件,如此才能變更服務提供者。

使用舊版的 Xerces 或 Xalan

如果您使用舊版的 Tomcat,可能有下列限制。

如果您使用舊版的 Xerces(2.0 之前)或 Xalan(2.3 之前),當您啟動應用程式時,可能會發生 Null 指標異常狀況。發生此異常狀況是因為這些舊版本無法正確處理 jaxp.properties 檔案。

若要避免這種狀況,請採取下列其中一項暫行解決方法:

使用 SDK 開發 Java 應用程式

下列章節說明使用 SDK for Windows 來開發 Java 應用程式的相關資訊。如需可用工具的詳細資料,請參閱 SDK 工具

Java 應用程式除錯

若要對 Java 程式進行除錯,您可以使用 Java 除錯器 (JDB) 應用程式,或其他利用 SDK for Windows 提供的 Java 平台除錯器架構 (JPDA) 來通訊的除錯器。

Java 除錯器 (JDB)

SDK for Windows 包含 Java 除錯器 (JDB)。此除錯器由 jdb 指令呼叫;可利用 JPDA 來「附加」至 JVM。若要進行 Java 應用程式除錯:

  1. 使用下列選項來啟動 JVM:
    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<port> 
         MyApp <MyApp args>
  2. JVM 會啟動,但在啟動 Java 應用程式之前會暫停執行。在不同的階段作業中,您可以將除錯器附加至 JVM:
    jdb -attach <port number>
    除錯器將附加至 JVM,而您現在可以發出一連串指令來檢查和控制 Java 應用程式;例如,鍵入 run 來執行 Java 應用程式。

如需 JDB 選項的詳細資訊,請鍵入:

jdb -help

如需 JDB 指令的詳細資訊:

  1. 鍵入 jdb
  2. 在 jdb 提示下,鍵入 help

您也可以使用 JDB 對在遠端機器上執行的 Java 應用程式進行除錯; JPDA 使用 TCP/IP 通訊端來連接至遠端 JVM。

  1. 依往常的方式啟動 JVM。
  2. 將除錯器附加至遠端電腦:
    jdb -attach <machine name or ip address>:<port number>

當您使用 dt_socket 傳輸啟動除錯階段作業時,請確定指定的埠可用。

|此版本支援「Java Virtual Machine 除錯介面 (JVMDI)」。它已由支援「Java Virtual Machine 工具介面 (JVMTI)」所取代。

如需 JDB 和 JPDA 及其用法的相關資訊,請造訪下列網站:


判定應用程式在 32 位元或 64 位元 JVM 上執行

某些 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 應用程式

原生程式在 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 下執行,並選擇適當的程式庫。

註:
不支援 Java Native Interface (JNI) 1.1 版。

使用 Applet

利用 Applet 檢視器,您可以執行一或多個 Applet,這些 Applet 在網頁中(HTML 檔案)使用 APPLET 標韱透過傳址方式呼叫。Applet 檢視器會在 HTML 檔案中尋找 APPLET 標韱,根據標韱的指示,在個別的視窗中執行 Applet。

因為 Applet 檢視器主要用來檢視 Applet,無法完整呈現包含許多 HTML 標籤的整個網頁。只是剖析 APPLET 標籤,並不處理網頁上的其他 HTML。

使用 Applet 檢視器執行 Applet

若要使用 Applet 檢視器來執行 Applet,請在指令提示下鍵入:

   appletviewer name

其中 name 是下列其中一項:

例如,若要在呼叫 Applet 的 HTML 檔上呼叫 Applet 檢視器,請在指令提示下鍵入:

appletviewer <demo>\GraphLayout\example1.html

其中 <demo> 替換為您解壓縮示範套件的完整路徑。

例如,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 檢視器進行 Applet 除錯

您可以使用 Applet 檢視器的 -debug 選項進行 Applet 除錯。進行 Applet 除錯時,建議您依據呼叫此 Applet 的 HTML 檔所在的目錄,從這個目錄中呼叫 Applet 檢視器。例如:

cd <demo>\TicTacToe
appletviewer -debug example1.html

其中 <demo> 替換為您解壓縮示範套件的完整路徑。

關於如何使用 Applet 檢視器進行 Applet 除錯的說明文件,請造訪 Sun 網站:http://java.sun.com

| | |

配置大頁面記憶體配置

|

在支援大型分頁的系統上,您可以利用 -Xlp 選項啟動 Java 來啟用大型分頁支援。

|

大頁面主要是針對配置了大量記憶體且經常會對其存取的應用程式來改善其使用效能。大頁面之所以能夠改善效能,主要是因為「分頁對照表 (Translation Lookaside Buffer, TLB)」 |中遺漏數目減少的緣故。TLB 會對映較大的虛擬記憶體範圍,藉以改善情況。

|

若要讓 JVM 使用大型分頁,系統必須有足夠的連續大型分頁可用。如果無法配置大型分頁,即使有足夠的分頁可用,則可能表示大型分頁不連續。

|

將 JVM 使用者的本端管理原則配置為容許「鎖定記憶體分頁」,才能順利配置大型分頁。

CORBA 支援

Java 2 Platform, Standard Edition (J2SE) 至少支援 Official Specifications for CORBA support in J2SE(1.5 版) 中定義的規格。在某些情況下,IBM J2SE ORB 支援最新版的規格。

對 GIOP 1.2 的支援

根據 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。

用來追蹤 ORB 的系統內容

執行時期除錯特性提供改進的服務功能。您可能會發覺這在問題診斷方面很有用,IBM 服務人員也可能對此提出要求。追蹤由三個系統內容來控制。

例如,若要追蹤事件和格式化的 GIOP 訊息,請鍵入:

 java -Dcom.ibm.CORBA.Debug=true  
		-Dcom.ibm.CORBA.CommTrace=true myapp   

請勿在一般作業上啟用追蹤,因為可能導致效能退化。即使您已停止追蹤,FFDC(首次失敗資料擷取)仍然繼續運作,所以只會報告嚴重的錯誤。如果產生除錯輸出檔,請細查檔案來檢查問題。例如,伺服器可能未執行 ORB.shutdown() 就停止。

追蹤輸出的內容和格式可能隨著版本而有所不同。

用來調整 ORB 的系統內容

下列內容可協助您調整 ORB:

ORB 的 Java 2 安全許可權

在 Java 2 SecurityManager 之下執行時,呼叫 CORBA API 類別中的某些方法可能會執行許可權檢查,因而導致 SecurityException。受影響的方法包括:

表 2. 搭配 Java 2 SecurityManager 執行時影響的方法
類別/介面 方法 必要許可權
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 實作類別

這個版本中的 ORB 實作類別如下:

這些是預設值,建議您不要設定這些內容或直接參照實作類別。為了提高可攜性,請您只參照 CORBA API 類別,不要參照實作。未來版本中可能變更這些值。

RMI over IIOP

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 連線處理程式的執行緒儲存池。

若要 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 中。

已強化的 BigDecimal

| |

從 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)

Java Communications 應用程式設計介面 (API) 套件 (JavaComm) 是選用性套件,可以搭配 Runtime Environment for Windows 一起使用。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

在安裝 Java Communications API 之前,請確定已安裝一套 SDK 或 Runtime Environment。

若要從 zip 檔案安裝 Java Communications API:

  1. 將 Java Communications API zip 檔案 ibm-java2-javacomm-50-win-i386.zip 放到 SDK 或 Runtime Environment 的安裝目錄。如果安裝為預設目錄,則應該是 C:\Program Files\IBM\Java50\。
  2. 將檔案解壓縮。解壓縮的檔案如下所示:

    如果在安裝 Runtime Environment 時接受預設目錄,則 comm.jar 檔案位於 C:\Program Files\IBM\Java50\jre\lib\ext。

    如果將檔案解壓縮到另一個目錄,檔案會放在相同的目錄結構,但 C:\Program Files\IBM\Java50\ 由您解壓縮檔案的目錄所取代。

配置 Java Communications API

安裝 Java Communications API 之後,您必須:

Java Communications API 列印限制

使用 Java Communications API 來列印時,您可能必須在印表機按下換頁繼續或類似的按鈕。

解除安裝 Java Communications API

若要解除安裝 Java Communications API,請從 Runtime Environment 安裝目錄中刪除下列檔案:

Runtime Environment 依預設安裝在 C:\Program Files\IBM\Java50\ 目錄。

Java Communications API 文件

您可以從 Sun 網站:http://java.sun.com 取 得 Java Communications API 的 API 文件和範例。

部署 Java 應用程式

使用 Java 外掛程式

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/

支援的瀏覽器

|

|表 3. Java 外掛程式支援的瀏覽器
|作業系統 |Internet Explorer |Netscape |Mozilla
|Windows 2000 |5.5 SP2、6.0 |4.78、6.2.2、7.2 |1.4.x、1.5.x、1.6.x、1.7.x、Firefox 1.0.x
|Windows XP |6.0 |4.78、6.2.2、7.2 |1.4.x、1.5.x、1.6.x、1.7.x、Firefox 1.0.x
|Windows Server 2003 |6.0 |4.78、6.2.2、7.2 |1.4.x、1.5.x、1.6.x、1.7.x、Firefox 1.0.x
|

請注意,不支援 Windows 2000 預設的瀏覽器 Internet Explorer 5.01。

Common Document Object Model (DOM) 支援

您可能會因為某些特定瀏覽器中所存在的限制,而無法實作 org.w3c.dom.html 套件的所有功能。

使用 DBCS 參數

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 檔案的編碼:

使用 Web Start

您可以使用 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/javawebstarthttp://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

執行 Web Start

您有三種方式可以呼叫 Web Start:

  1. 在網頁上選取 .jnlp 檔案的鏈結。
  2. 指令提示下,鍵入 javaws <URL>,其中 <URL> 是 .jnlp 檔案的位置。
  3. |如果您已使用 Java Web Start 開啟應用程式,請從 jre\bin 目錄執行 javaws 以啟動「Java 應用程式快取檢視器」。

應用程式下載之後會儲存在「Java 應用程式快取」中。再次存取應用程式時,如果有最新版本,Java Web Start 會下載最新版的應用程式,如果沒有,則會使用快取的版本。

如果 .jnlp 檔案中發生錯誤(例如,標記名稱無效)Web Start 會失敗,但不會顯示錯誤訊息。

移轉 Java 應用程式

Java 應用程式不同於 Java Applet,不能依賴 Web 瀏覽器來執行安裝和使用執行時期服務。當您移轉 Java 應用程式時,您的套裝軟體可能包括下列元件:

使用者需要 Runtime Environment for Windows,才能執行您的 應用程式。SDK for Windows 軟體包含 Runtime Environment。然而,您不能 假設使用者一定已經安裝 SDK for Windows 軟體。

您的 SDK for Windows 軟體授權允許伴隨您的應用程式來重新分送 SDK 的任何檔案。您應該確定目標電腦上已安裝 SDK for Windows 授權版本。

| | |

在 JVM 之間共用類別資料

|

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 安全許可權。只有已向共用類別登錄的類別載入器可以將類別新增至共用類別快取。如果已安裝 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 並行執行,會使整體啟動時間縮短。

|

以類別共用來執行應用程式時,您可以利用作業系統工具,查看虛擬記憶體用量降低的成效。

| |

使用類別共用的限制和考量

| |

快取大小的限制

|

理論上,最大快取記憶體大小為 2GB。快取記憶體將會受到下列因素所限制:

|

| | |

執行時期位元組碼修正

|

如果 VM 使用會修改位元組碼的 JVMTI 代理程式,則無法共用類別,除非在指令行使用 modified=<modified_context> 子選項(請參閱以上說明)。修改的環境定義是使用者指定的描述子,說明執行的修改類型。使用已修改的特定環境定義的所有 VM,必須以可預期、可重複的方式修改每一個類別的位元組碼,讓儲存在快取中已修改的類別由另一個 VM 載入時,具有預期的修改結果。任何修改必須可預期,理由是從共用類別快取中載入的類別,無法再由代理程式修改。請注意,修改過和未修改的位元組碼可以同時儲存在相同的快取中。如需此主題的相關資訊,請參閱 Diagnostics Guide

| |

作業系統限制

|

對於可執行 32 位元和 64 位元應用程式的作業系統,不允許在 32 位元和 64 位元之間共用類別。listAllCaches 子選項會列出 32 位元或 64 位元快取,視使用的 VM 的位址模式而定。

|

共用類別快取需要磁碟空間來儲存系統上存在之快取的識別資訊。這項資訊位於使用者設定檔的目錄中。如果刪除識別資訊目錄,VM 將無法識別系統上的共用類別,必須重建快取。

|

存取共用類別快取的許可權由作業系統強制實施。如果不指定快取名稱,則使用者名稱會附加至預設名稱,因此,相同系統上的多位使用者依預設會建立自己的快取。

| |

使用 SharedClassPermissions

|

如果 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/

iKeyman 協助工具

|除了 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]

其中:

<object>
是下列其中一項:
-keydb
在金鑰資料庫檔上(CMS 金鑰資料庫、WebDB 金鑰環檔案或 SSLight 類別)採取的動作
-cert
要對金鑰資料庫內的憑證採取的動作
-certreq
要對金鑰資料庫內的憑證要求採取的動作
-version
顯示 IKEYCMD 的版本資訊
-help
顯示 IKEYCMD 呼叫的說明。
<action>
|對物件採取的特定動作。若要查看物件的可用動作,請呼叫 IKEYCMD,呼叫時請僅傳遞物件作為引數。畫面上會顯示上下文相關說明,顯示該物件的可用動作。
-Dikeycmd.properties
指定用於此 Java 呼叫的選用性內容檔的名稱。已提供一個預設的內容檔 ikeycmd.properties 當做範例檔,可以修改並提供給任何 Java 應用程式使用。

註:
物件和動作關鍵字必須依指定的順序設定。不過,選項不具位置性,只要指定為選項和運算元的配對,就沒有順序限制。

如需相關資訊,請參閱 iKeyman 使用手冊,其位於下列網址:http://www.ibm.com/developerworks/java/jdk/security/index.html

在 Swing 的 JComboBox 元件中執行鍵盤遍訪

如果您利用游標鍵來遍訪 JComboBox 元件的下拉清單,則在選取項目之前,組合框的按鈕或可編輯欄位的值不會變更。此為這個版中想要達成的行為,確保鍵盤遍訪行為和滑鼠遍訪保持一致,提高存取性和實用性。

Web Start 協助工具

在協助工具和使用性方面,IBM Java Web Start 5.0 版比舊版的改善之處更多,包括對螢幕助讀員提供更好的支援及改良的鍵盤導覽。

您只能使用指令行來啟動支援 Web Start 的 Java 應用程式。若要變更喜好設定選項,您必須編輯使用者起始目錄中的配置檔 Application Data\IBM\Java\Deployment\deployment.properties。編輯此檔案之前,請先備份。「Java 應用程式快取檢視器」中可設定的喜好設定,並非全部都包含在配置檔中。

關於安全性的一般注意事項

您可以從 http://www.ibm.com/developerworks/java/jdk/security/index.html 取得 JCE 不限適用範圍的原則檔。這個網站上也提供有關 IBM 安全性套件 JCE、JCEFIPS、JSSE2、JSSEFIPS、JGSS、JAAS 及硬體加密的文件。

已知限制

請注意 IBM 32-bit SDK for Windows 5.0 版 有下列限制:

對於本「使用手冊」是否有任何意見?

如果您對於本「使用手冊」的效用或其他方面有任何的批評指教,歡迎您使用下列其中一種管道將您的意見提供給我們參考。請注意,這些管道的設立並不是為了要回答技術上的疑問,而只是為了要取得有關文件的意見。請使用下列方法來傳送您的意見:

補充說明。 選擇傳送訊息給 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. 在美國及(或)其他國家或地區的商標或註冊商標。

Microsoft、Windows 及 Windows 標誌是 Microsoft Corporation 在美國及(或)其他國家的商標。

其他公司、產品或服務名稱,可能是第三者的商標或服務標誌。

本產品有一部分是以 FreeType Project 的成果為基礎。關於 Freetype 的詳細資訊,請參閱 http://www.freetype.org

本產品包含由 Apache Software Foundation http://www.apache.org/ 所開發之軟體。