# 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 2000
- Windows XP
- Windows Server 2003

請注意：只有在 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 移轉，請注意：

- JVM 動態鏈結程式庫 jvm.dll 安裝在 jre\bin\j9vm 目錄中。這不同於（舉例而言）Runtime Environment for Windows for Version 1.4.2，其中，安裝的目錄是 jre\bin\classic。使用 JNI 呼叫介面的原生應用程式，可能需要將新的目錄路徑新增至環境變數，才能找到 JVM 動態鏈結程式庫。
- |不再支援 JVM 監視介面 (JVMMI)。您必須重寫使用該 API 的應用程式。建議您改用 JVM 工具介面 (JVMTI)。JVMTI 在功能上與 JVMMI 不同。如需 JVMTI 的相關資訊，請參閱 http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/ 和 Diagnostics Guide。
- |新版 JNI 實作方式符合 JNI 規格，與舊版實作方式不同。新的實作方式會傳回物件的複本，而不鎖定物件。這項差異可能曝露 JNI 應用程式程式碼的錯誤。如需 JNI程式碼除錯的相關資訊，請參閱非標準選項中的 -Xcheck:jni。
- |使用 -verbose:gc 取得之記憶體回收器詳細日誌已變更格式和內容。現在資料是 XML 格式。資料內容反映 JVM 中記憶體回收實作方式的變更，且輸出的大部分統計資料也已變更。您必須變更任何處理 GC 詳細輸出的程式，以便於繼續使用新的格式和資料。如需新的 GC 詳細資料範例，請參閱 Diagnostics Guide。
- 舊版的 IBM JRE 在 jre/lib 目錄中提供一個檔案，稱為 rt.jar。從 Java 1.4 版開始，此檔案已由 jre/lib 目錄中的多個 JAR 檔取代。
- |如需其他的產業相容性及淘汰的 api 資訊，請參閱 Sun's Java 5 Compatibility Documentation 和 Sun's Java 5 Depreciated API List

# SDK 和 Runtime Environment 的內容

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

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

## Runtime Environment 工具

- 核心類別 -- 這些是針對平台而編譯的類別檔案，必須保持為壓縮格式，才能供編譯器和直譯器存取。請勿修改這些類別；請改以建立子類別，並依情況置換您需要改寫的地方。
- JRE 工具 -- 下列工具是 Runtime Environment 的一部份，位於 the jre\bin 目錄中，除非另行指定。
  - java.exe（Java 直譯器）
    - 執行 Java 類別。「Java 直譯器」執行以 Java 程式設計語言撰寫的程式。
  - javaw.exe（Java 直譯器）
    - 使用與 java 指令一樣的方式執行 Java 類別，但不使用主控台視窗。
  - keytool.exe（金鑰和憑證管理工具）
    - 管理私密金鑰及其相關 X.509 憑證鏈的金鑰儲存庫（資料庫），私密金鑰和憑證鏈用來鑑別相對應的公開金鑰。
  - policytool.exe（建立與管理原則檔的工具）
    - 建立和修改外部原則配置檔，此配置檔定義安裝環境的 Java 安全原則。
  - rmid.exe（RMI 啟動系統常駐程式）
    - 將啟動系統常駐程式啟動，讓物件可以在 Java Virtual Machine (JVM) 中登錄和啟動。
  - tnameserv.exe（Common Object Request Broker Architecture (CORBA) 命名服務）
    - 啟動 CORBA 暫時命名服務。
  - rmiregistry.exe（Java 遠端物件登錄）
    - 在現行主機的指定埠號上建立和啟動遠端物件登錄。
  - ikeyman.exe（iKeyman GUI 公用程式）
    - 可讓您管理金鑰、憑證及憑證要求。如需相關資訊，請參閱隨附的安全手冊和 http://www.ibm.com/developerworks/java/jdk/security。SDK 也提供此公用程式的 指令行版本。請參閱 iKeyman 協助工具以取得詳細資料。
  - jextract.exe（傾出擷取器）
    - 將系統產生的傾出轉換成一般格式，供 jdmpview 使用。如需相關資訊，請參閱 Diagnostics Guide。
  - javaws.exe (Java Web Start)
    - 可以部署和自動維護 Java 應用程式。

## SDK 工具

- 下列工具是 SDK 的一部份，位於 C:\Program Files\IBM\Java50\bin 目錄：
  - javac.exe（Java 編譯器）
    - 將使用 Java 程式設計語言撰寫的程式編譯成位元組碼（已編譯的 Java 程式碼）。
  - appletviewer.exe（Java Applet 檢視器）
    - 在 Web 瀏覽器之外測試和執行 Applet。
  - jdb.exe（Java 除錯器）
    - 協助進行 Java 程式除錯。
  - javap.exe（類別檔案反組合器）
    - 逆向組合已編譯的檔案，且可以印出位元組碼的表示法。
  - javadoc.exe（Java 文件產生器）
    - 從 Java 原始程式檔中產生 API 文件的 HTML 頁面。
  - javah.exe（C 標題和 Stub 檔案產生器）
    - 可讓您在原生方法與 Java 程式設計語言撰寫的程式碼之間建立關聯性。
  - jar.exe（Java Archive 工具）
    - 將多個檔案合併為單一 Java Archive (JAR) 檔案。
  - jarsigner.exe（JAR 簽章和驗證工具）
    - 產生 JAR 檔的簽章，並驗證已簽署的 JAR 檔的簽章。
  - jconsole.exe（JConsole 監視和管理工具 - 實驗性的）
    - 實驗性的（不受支援的）JMX 相容圖形工具，用於監視本端和遠端 JVM。
  - native2ascii.exe（Native-To-ASCII 轉換器）
    - 將原生的編碼檔案轉換成 ASCII 檔案，內含以 Latin-1、Unicode 或兩者編碼的字元。
  - rmic.exe（Java 遠端方法呼叫 (RMI) Stub 轉換器）
    - 產生遠端物件的 Stub、Skeleton 及 Tie。也包含 RMI over Internet Inter-ORB Protocol (RMI-IIOP) 支援。
  - idlj.exe（IDL 至 Java 編譯器）
    - 從給定的 IDL 檔產生 Java 連結。
  - serialver.exe（序列版本指令）
    - 以適合複製到衍生類別的格式，傳回一或多個類別的 serialVersionUID。
  - extcheck.exe（Extcheck 公用程式）
    - 偵測目標 Jar 檔與目前安裝的延伸 Jar 檔之間的版本衝突。
  - jdmpview.exe（跨平台的傾出格式製作器）
    - 一套可讓您分析傾出的工具。如需相關資訊，請參閱 Diagnostics Guide。
  - htmlconverter.exe（Java Plug-in HTML 轉換器）
    - 將含有 Applet 的 HTML 網頁轉換成可使用 Java Plug-in 的格式。
- 併入檔
  - JNI 程式的 C 標題。
- 示範
  - demo 目錄包含許多子目錄，子目錄內有您可以使用的範例原始碼、示範、應用程式及 Applet。
- 版權
  - SDK for Windows 軟體的版權聲明。
- 授權
  - 授權檔 C:\Program Files\IBM\Java50\license 包含 SDK for Windows 軟體的授權合約。若要檢視或列印授權合約，請在 Web 瀏覽器中開啟此檔案。

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

# 安裝和配置 SDK 與 Runtime Environment

## 安裝之前

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

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

- SDK 可安裝套件：130 MB
- Runtime Environment 可安裝套件：85 MB

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

## 手動式（互動式）安裝作業

您可以安裝的套件如下：

- SDK 可安裝套件：ibm-java2-sdk-50-win-i386.exe
- Runtime Environment 可安裝套件：ibm-java2-jre-50-win-i386.exe
- Runtime Environment 可安裝套件（僅限 IBM 硬體）：ibm-java2-jre-50-ibmpc-win-i386.exe

其他套件以 zip 檔案提供：

- Runtime Environment 套件：ibm-java2-jre-50-win-i386.zip
- SDK 套件：ibm-java2-sdk-50-win-i386.zip
- Java Communications Application Programming Interface (API) for Windows 套件：ibm-java2-javacomm-50-win-i386.zip。請參閱安裝 Java Communications API 以取得安裝指示。
- 文件套件：ibm-java2-docs-50-win-i386.zip
- 示範套件：ibm-java2-demos-50-win-i386.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 可安裝套件，您可以選擇是否安裝：

- SDK 開發工具（例如 Java 編譯器）
- Runtime Environment
- Sun 類別庫的原始碼，供某些工具執行應用程式除錯。

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

在安裝精靈中，您會看到下列選項：

- 典型 - 此選項會將三個元件全部安裝。
- 精簡 - 此選項只安裝 Runtime Environment。
- 自訂 - 此選項可讓您選擇要安裝哪些元件。

### 將 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 系統目錄，刪除下列兩個檔案：

- java.exe
- javaw.exe

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

在您要執行無人式安裝作業的系統上，將 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 環境變數：
   - C:\Program Files\IBM\Java50\bin（僅限 SDK）
   - C:\Program Files\IBM\Java50\jre\bin（SDK 和 Runtime Environment）

   如果將 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 工具 （例如 java、javac 及 javadoc）到何處尋找 Java 類別庫。

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

- 您需要不同的程式庫或類別檔案，例如在您所開發的檔案，但並不在現行目錄中。
- 您變更 bin 和 lib 目錄的位置，導致不再共用相同的上層目錄。
- 您打算開發或執行在相同系統上使用不同執行時期環境的應用程式。

若要顯示 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 版 安裝無法運作。

- HKEY_LOCAL_MACHINE/Software/IBM/Java2 Runtime Environment
- HKEY_LOCAL_MACHINE/Software/IBM/Java Development Kit

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

# 使用 Runtime Environment

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

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

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

java 與 javaw 指令的語法如下：

    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 為優先。

### 標準選項

- -D<property_name>=<value>
  - 設定系統內容。
- -assert
  - 列印 assert 相關選項的說明。
- -cp 或 -classpath <以 ; 分隔的目錄和 zip 或 jar 檔案>
  - 設定應用程式類別和資源的搜尋路徑。若不使用 -classpath 和 -cp ，且未設定 CLASSPATH，則使用者類別路徑預設為現行目錄 (.).
- -help 或 -?
  - 列印用法訊息。
- -showversion
  - 列印產品版本並繼續。
- -verbose:[class,gcterse,gc,dynload,stackwalk,sizes,stack,debug,jni]
  - 啟用詳細輸出。
- -version
  - 列印產品版本。
- -version:<value>
  - 需要指定的版本才能執行。
- -jre-restrict-search
  - 在版本搜尋中包含使用者私密 JRE
- -no-jre-restrict-search
  - 在版本搜尋中排除使用者私密 JRE
- -agentlib:<libname>[=<options>]
  - 載入原生代理程式庫 <libname>，例如 -agentlib:hprof。如需相關資訊，請在指令行上指定 -agentlib:jdwp=help 和 -agentlib:hprof=help。
- -agentpath:libname[=<options>]
  - 按完整路徑名稱載入原生代理程式庫
- -javaagent:<jarpath>[=<options>]
  - 載入 Java 程式設計語言代理程式；如需相關資訊，請參閱 java.lang.instrument API 文件。
- -X
  - 列印非標準選項的說明。

### 非標準選項

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

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

- -Xargencoding
  - 可讓您在引數清單中插入 Unicode 脫序字元。依預設會關閉此選項。
- -Xbootclasspath: <以 ";" 區隔的 目錄和 zip 或 jar 檔>
  - 設定 bootstrap 類別和資源的搜尋路徑。預設會在內部 VM 目錄和 .jar 檔案內搜尋 bootstrap 類別和資源。
- -Xbootclasspath/a: <以 ";" 間隔的目錄和 zip 或 jar 檔案>
  - 將指定的目錄、zip 或 jar 檔附加至 bootstrap 類別路徑後面。預設會在內部 VM 目錄和 .jar 檔案內搜尋 bootstrap 類別和資源。
- -Xbootclasspath/p: <以 ";" 間隔的目錄和 zip 或 jar 檔>
  - 在 bootstrap 類別路徑開頭插入指定的目錄、zip 或 jar 檔。請勿部署使用 -Xbootclasspath: 或 -Xbootclasspath/p: 選項的應用程式來置換標準 API 中的類別，因為如此部署將違反 Java 2 Runtime Environment 二位元碼授權合約。預設會在內部 VM 目錄和 .jar 檔案內搜尋 bootstrap 類別和資源。
- -Xcheck:jni
  - 執行 JNI 函數的額外檢查。您也可以使用 -Xrunjnichk。依預設不會執行檢查。
- -Xcheck:nabounds
  - 執行 JNI 陣列作業的額外檢查。您也可以使用 -Xrunjnichk。依預設不會執行檢查。
- |-Xclassgc | |
  |
  - 此選項可以在每一次記憶體回收時收集類別物件。依預設會啟用此選項。
- -Xcompactexplicitgc
  - 每一次呼叫 `System.gc()` 時壓縮。另請參閱 -Xnocompactexplicitgc。依預設，只有在內部觸發時才會壓縮。
- -Xcompactgc
  - 壓縮每一次的「記憶體回收器」週期。另請參閱 -Xnocompactgc。依預設，只有在內部觸發時才會壓縮。
- |-Xconcurrentbackground <number> | |
  |
  - 此選項指定附加的低優先順序背景執行緒數目，在並行標示中協助 mutator 執行緒。預設值為 1。
- |-Xconcurrentlevel <number> | |
  |
  - 此選項指定配置「課稅」(tax) 率。指出配置的資料堆數量和標示的資料堆數量之間的比例。預設值為 8。
- |-Xconmeter:<soa | loa | dynamic> | |
  |
  - 此選項決定要測量哪個區域的使用情況（LOA 或 SOA），藉以決定並行標示期間要對哪些配置課稅。使用 -Xconmeter:soa 會對小型物件區域 (SOA) 的配置課徵分配稅，使用 -Xconmeter:loa 會對大型物件區域 (LOA) 的配置課徵分配稅。如果指定 -Xconmeter:dynamic ，收集器會依據哪一個區域最先耗盡、是否為 SOA 或 LOA，動態決定要測量哪一個區域。依預設，此選項會設為 -Xconmeter:soa。
- -Xdbg:<options>
  - 載入除錯程式庫，以便支援應用程式的遠端除錯功能。同於 -Xrunjdwp。依預設，不會載入除錯程式庫，也不會對 VM 實例啟用除錯功能。
- -Xdbginfo:<符號檔的路徑>
  - 載入選項並傳給除錯資訊伺服器。依預設會停用除錯資訊伺服器。
- -Xdebug
  - 啟動 JVM 並啟用除錯器。依預設會停用除錯器。
- |-Xdisableexcessivegc |
  |
  - 此選項會停止在 GC 執行過久時擲出 OutOfMemory 異常狀況。依預設會關閉此選項。
- -Xdisableexplicitgc
  - 對於呼叫 `System.gc()` 的 VM，信號應該不受影響。依預設，呼叫 `System.gc()` 會觸發記憶體回收。
- |-Xdisablestringconstantgc |
  |
  - 此選項防止在字串初始表格中收集字串。依預設會停用此選項。
- -Xdisablejavadump
  - 對於錯誤和信號不產生 javadump。依預設會產生 javadump。
- |-Xenableexcessivegc |
  |
  - 如果 GC 執行過久，此選項會傳回 NULL 來回應配置要求，導致擲出 OutOfMemory 異常狀況。唯有當資料堆已完全擴充且花費時間至少達到 95% 以上時，才會發生此動作。此為預設行為。
- |-Xenablestringconstantgc |
  |
  - 此選項允許從字串初始表格中收集字串。依預設會啟用此選項。
- -Xfuture
  - 嚴格檢查類別檔案的格式。在開發新的程式碼時，請使用此旗標，因為在未來版本中，將以嚴格檢查為預設值。依預設會停用嚴格的格式檢查。
- -Xgcpolicy:[optthruput]|[optavgpause]|[gencon]
  - 控制「記憶體回收器」的行為。optthruput 選項是預設值，可以對應用程式提供極高產能，代價是必須忍受偶而的暫停。optavgpause 選項可以 縮短這種記憶體回收暫停的時間，節制資料堆大小增加對於記憶體回收暫停時間所造成 的影響。如果您的配置有很大的資料堆，請使用 optavgpause。gencon 選項 要求結合並行與世代 GC 一起使用，以縮短任何記憶體回收暫停的時間。 如需相關資訊，請參閱 指定記憶體回收原則。
- -Xgcthreads<執行緒數目>
  - 設定在記憶體回收期間用於並行作業的 Helper 執行緒數目。依預設，執行緒數目設為實際存在的 CPU 數目 -1，最小值為 1。
- |-Xgcworkpackets <number> |
  |
  - 此選項指定廣域收集器中可用的工作封包總數。如果不指定，收集器會依據資料堆的大小上限來配置許多封包。
- -Xint
  - 指示 JVM 只使用「直譯器」，並停用 Just-In-Time (JIT) 編譯器。依預設會啟用 JIT 編譯器。
- -Xiss<size>
  - 設定起始的 Java 執行緒堆疊大小。預設為 2 KB。
- -Xjit[:<suboption>,<suboption>,...]
  - 啟用 JIT。如需子選項的詳細資料，請參閱 Diagnostics Guide。另請參閱 -Xnojit。依預設會啟用 JIT。
- -Xlinenumbers
  - 在堆疊追蹤中顯示行號，以方便除錯。另請參閱 -Xnolinenumbers。依預設會顯示行號。
- |-Xloa |
  |
  - 這個選項會配置大型物件區域 (LOA)。物件將被配置在這個 LOA 中，而非 SOA。依預設，會對所有的 GC 原則啟用 LOA，但是子儲存池除外，其中無法使用 LOA。另請參閱 -Xnoloa。
- |-Xloainitial <number> |
  |
  - <number> 介於 0 到 0.95 之間，指定現行正式空間配置給大型物件區域 (LOA) 的起始百分比。預設值為 0.05 或 5%。
- |-Xloamaximum <number> |
  |
  - <number> 介於 0 到 0.95 之間，指定現行正式空間配置給大型物件區域 (LOA) 的最大百分比。預設值為 0.5 或 50%。
- |-Xlp (Windows 2003) | |
  |
  - 要求 JVM 以大型分頁來配置 Java 資料堆。如果無法使用大型分頁，JVM 不會啟動，將會顯示錯誤訊息 `GC：系統配置不支援選項 --> '-Xlp'`。大型分頁受執行 Windows 2003 的系統支援，其中已經設定作業系統來使用大型分頁。依預設不使用大型分頁。請參閱配置大頁面記憶體配置。
- -Xmaxe<size>
  - 設定記憶體回收器擴充資料堆的最大數量。通常，當可用空間數量低於 30% 時（或低於 -Xminf 指定的數量時），記憶體回收器就會擴充資料堆，並以可用空間恢復為 30% 所需的數量為擴充幅度。-Xmaxe 選項會限制擴充到指定的值； 例如，`-Xmaxe10M` 限制擴充到 10MB。依預設，擴充大小沒有上限。
- -Xmaxf<size>
  - 指定記憶體回收之後必須可供使用的資料堆百分比上限。如果可用空間超出此數量，JVM 會嘗試收縮資料堆。請指定大小為範圍 0-1 之內的十進位值，例如，`-Xmaxf0.5` 將可用空間上限設為 50%。預設值為 0.6 (60%)。
- -Xmca<size>
  - 設定記憶體擴充增量，依此增量配置以儲存 RAM 中載入的類別部份。每次需要更多記憶體來儲存 RAM 中的類別時，配置的記憶體就依此數量遞增。預設的擴充增量為 32K。
- -Xmco<size>
  - 設定記憶體擴充增量，依此增量配置以儲存 ROM 中載入的類別部份。每次需要更多記憶體來儲存 ROM 中的類別時，配置的記憶體就依此數量遞增。預設的擴充增量為 128K。
- -Xmine<size>
  - 設定「記憶體回收器」擴充資料堆的最小數量。通常，記憶體回收器會以可用空間恢復到 30% 所需的數量（或依 -Xminf 指定的數量）來擴充資料堆。-Xmine 選項可以設定至少擴充到指定的值； 例如，`-Xmine50M` 將擴充大小設為至少 50MB。預設的最小擴充大小為 1MB。
- -Xminf<size>
  - 指定記憶體回收之後應該可供使用的資料堆百分比下限。如果可用空間小於此數量，JVM 會嘗試擴充資料堆。請指定大小為範圍 0-1 之內的十進位值； 例如，`-Xminf0.3` 要求最小可用空間為資料堆的 30%。預設的最小值為 0.3。
- -Xmn<size>
  - 將新的（培育）資料堆的起始大小和大小上限設為使用 -Xgcpolicy:gencon 時指定的值。相當於 -Xmns 和 -Xmnx 的設定。|如果您設定 -Xmns 或 -Xmnx，則無法設定 -Xmn。如果您嘗試搭配 -Xmns 或 -Xmnx 來設定 -Xmn，則 VM 不會啟動，將傳回錯誤。依預設，內部會依據系統的功能來選取 -Xmn。您可以使用 -verbose:sizes 選項，以瞭解 VM 目前使用的值。
- -Xmns<size>
  - 將新的（培育）資料堆的起始大小設為使用 -Xgcpolicy:gencon 時指定的值。依預設，內部會依據系統的功能來選取此選項。|如果您嘗試搭配 -Xmn 來使用此選項，將傳回錯誤。
- -Xmnx<size>
  - 將新的（培育）資料堆的大小上限設為使用 -Xgcpolicy:gencon 時指定的值。依預設，內部會依據系統的功能來選取此選項。|如果您嘗試搭配 -Xmn 來使用此選項，將傳回錯誤。
- -Xmo<size>
  - 將舊的（正式）資料堆的起始大小和大小上限設為使用 -Xgcpolicy:gencon 時指定的值。相當於設定 -Xmos 和 -Xmox。|如果您設定 -Xmos 或 -Xmox，則無法設定 -Xmo。如果您嘗試搭配 -Xmos 或 -Xmox 來設定 -Xmo，則 VM 不會啟動，將傳回錯誤。 依預設，內部會依據系統的功能來選取 -Xmo。您可以使用 -verbose:sizes 選項，以瞭解 VM 目前使用的值。
- -Xmos<size>
  - 將舊的（正式）資料堆的起始大小設為使用 -Xgcpolicy:gencon 時指定的值。依預設，內部會依據系統的功能來選取此選項。|如果您嘗試搭配 -Xmo 來使用此選項，將傳回錯誤。
- -Xmox<size>
  - 將舊的（正式）資料堆的大小上限設為使用 -Xgcpolicy:gencon 時指定的值。依預設，內部會依據系統的功能來選取此選項。|如果您嘗試搭配 -Xmo 來使用此選項，將傳回錯誤。
- -Xmoi<size>
  - 設定 Java 資料堆的增量（使用 -Xgcpolicy:gencon 時）。如果設為零，則不允許擴充。依預設，增量大小會根據擴充大小 -Xmine 和 -Xminf 來計算。
- -Xmr<size>
  - 集記憶體回收「記住設定」(remembered set) 的大小（使用 -Xgcpolicy:gencon 時）。此為舊的（正式）資料堆中的物件清單，這些物件參考到新的（培育）資料堆中的物件。此選項預設為 16 KB。
- -Xms<size>
  - 設定起始的 Java 資料堆大小。 您也可以使用 -Xmo。內部會根據系統的功能來設定預設值。
- -Xmso<size>
  - 設定分支的 Java 執行緒的 C 堆疊大小。依預設，此選項在 32 位元平台上設為 32 KB，在 64 位元平台上設為 256 KB。
- -Xmx<size>
  - 設定 Java 資料堆大小上限。依預設，內部會根據系統的功能來設定此選項。
- -Xnoclassgc
  - 停用類別記憶體回收。對於 JVM 不再使用的 Java 類別，此選項會在相關的儲存體上停用記憶體回收。預設行為是 -Xclassgc。
- -Xnocompactgc
  - 對「記憶體回收器」停用壓縮。另請參閱 -Xcompactgc。依預設會啟用壓縮。
- -Xnocompactexplicitgc
  - 在 `System.gc()` 呼叫上停用壓縮。另請參閱 -Xcompactexplicitgc。依預設，在 `System.gc()` 呼叫上會啟用壓縮。
- -Xnojit
  - 停用 JIT 編譯器。另請參閱 -Xjit。依預設會啟用 JIT 編譯器。
- -Xnolinenumbers
  - 停用除錯行號。另請參閱 -Xlinenumbers。依預設會啟用行號。
- |-Xnoloa | |
  |
  - 這個選項會防止配置大型物件區域 (LOA)。所有物件都將配置在 SOA 中。依預設，會對所有的 GC 原則啟用 LOA，但是子儲存池除外，其中無法使用 LOA。另請參閱 -Xloa。
- -Xnopartialcompactgc
  - 停用漸進式壓縮。另請參閱 -Xpartialcompactgc。依預設不設定此選項，所有壓縮皆為完整壓縮。
- -Xnosigcatch
  - 停用 JVM 信號處理程式碼。另請參閱 -Xsigcatch。依預設會啟用信號處理。
- -Xnosigchain
  - 停用信號處理程式鏈結。另請參閱 -Xsigchain。依預設會啟用信號處理程式鏈結。
- -Xoptionsfile=<file>
  - 指定含有 JVM 選項和定義的檔案。依預設不使用選項檔。
- -Xoss<size>
  - 設定任一執行緒的 Java 堆疊大小和 C 堆疊大小。這個選項係為相容性而提供，相等於將 -Xss 和 -Xmso 都設為指定的值。
- -Xpartialcompactgc
  - 啟用局部壓縮。另請參閱 -Xnopartialcompactgc。
- -Xquickstart
  - 透過延遲 JIT 編譯和最佳化來縮短啟動時間。依預設會停用快速啟動，且不延遲 JIT 編譯。
- -Xrdbginfo:<host>:<port>
  - 載入選項並傳給遠端除錯資訊伺服器。依預設會停用遠端除錯資訊伺服器。
- -Xrs
  - 減少作業系統信號的使用。依預設，VM 會完全利用作業系統信號，請參閱JVM 使用的信號。
- -Xrun<library name>[:options]
  - 載入說明程式程式庫。如需載入多個程式庫，請在指令行上多次指定此選項。此類程式庫的範例如下：
    - -Xrunhprof[:help] | [:<option=<value, ...]
      - 執行資料堆、CPU 或監視器效能分析。如需相關資訊，請參閱 Diagnostics Guide。
    - -Xrunjdwp[:help] | [:<option=<value, ...]
      - 載入除錯程式庫，以便支援應用程式的遠端除錯功能。此選項同於 -Xdbg。如需相關資訊，請參閱 Java 應用程式除錯。
    - -Xrunjnichk[:help] | [:<option>=<value>, ...]
      - 對 JNI 函數執行額外的檢查，在存取 JVM（使用 JNI）的原生程式中追蹤錯誤。如需相關資訊，請參閱 Diagnostics Guide。
- |-Xscmx<size>[k|m|g] | |
  |
  - 如需 -Xscmx 的詳細資料，請參閱使用指令行選項來共用類別。
- |-Xshareclasses:<suboptions> | |
  |
  - 如需 -Xshareclasses 子選項的詳細資訊，請參閱使用指令行選項來共用類別。
- -Xsigcatch
  - 啟用 VM 信號處理程式碼。另請參閱 -Xnosigcatch。依預設會啟用信號處理。
- -Xsigchain
  - 啟用信號處理程式鏈結。另請參閱 -Xnosigchain。依預設會啟用信號處理程式鏈結。
- |-Xsoftrefthreshold<number> | |
  |
  - 此選項設定 GC 次數，超過此次數之後，如果尚未標示參照對象，則清除軟體參照。預設值為 3，表示在第三次 GC 時尚未標示參照對象，將清除軟體參照。
- -Xss<size>
  - 設定任一執行緒的 Java 堆疊大小上限。 此選項預設為 256 KB。
- -Xthr:<options>
  - 設定執行緒的選項。
- -Xverbosegclog:<path to file><filename>[X, Y]
  - 使 verboseGC 輸出寫入指定的檔案。如果檔案存在，則予以改寫。如果無法開啟現有的檔案或無法建立新檔案，則輸出會重新導向至 stderr。如果您指定引數 X 和 Y（兩者皆為整數），則 verboseGC 輸出會重新導向 X 個檔案，其中每一個檔案包含 Y 個 gc 週期的 verboseGC 輸出。這些檔案的格式為 filename1、filename2，依此類推。依預設不執行詳細記憶體回收記載。
- -Xverify
  - 在每一個載入的類別上啟用嚴格類別檢查。依預設會停用嚴格類別檢查。
- -Xverify:none
  - 停用嚴格類別檢查。依預設會停用嚴格類別檢查。

## 取得 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'

java 和 javaw 指令提供經過翻譯的輸出訊息。這些訊息視執行 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 應用程式之前，將 JAVA_COMPILER 環境變數設為 "NONE" 或空字串。

  在應用程式執行所在的指令提示下，鍵入：

      set JAVA_COMPILER=NONE

  您也可以使用圖形使用者介面來永久設定 JAVA_COMPILER。請開啟控制台、 選取系統，然後在進階標籤上，選取環境變數。

- 在 JVM 指令行上使用 -D 選項，將 java.compiler 內容設為 "NONE" 或空字串：

      java -Djava.compiler=NONE MyApp

- 在 JVM 指令行上使用 -Xint 選項。例如：

      java -Xint MyApp

這兩個指令行選項都會置換 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（預設值及建議值）、optavgpause 或 gencon。該選項會控制記憶體回收器的行為，在應用程式和整體系統的產能以及因記憶體回收所造成的暫停時間之間找出平衡點。

該選項及其值的格式為：

> -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 的處理如下：

- 處理狀況並回復，或
- 輸入受控制的關機順序，在此狀況下，它會：
  1. 輸出 Javadump，以說明失敗當時 JVM 的狀態
  2. 呼叫您應用程式的信號處理程式來處理該信號
  3. 呼叫任何應用程式安裝的終止追蹤點
  4. 執行必要的清除作業以進行完整關機

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

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

- 呼叫您應用程式的信號處理程式來處理該信號
- 執行所有應用程式關機追蹤點
- 呼叫任何應用程式安裝的終止追蹤點
- 執行必要的 JVM 清除作業

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

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

### JVM 使用的信號

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

- 異常狀況：每當發生嚴重的狀況時，作業系統就同步發出適當的異常狀況信號。
- 錯誤：JVM 在偵測到無法回復的狀況時，就發出 SIGABRT。
- 岔斷：從 JVM 程序以外非同步發出岔斷信號來要求關機。
- 控制：供 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 檔案中的登錄（位於 C:\Program Files\IBM\Java50\jre\lib），或
- 將 javax.xml.transform.TransformerFactory 鍵值的系統內容設為 org.apache.xalan.xsltc.trax.TransformerFactoryImpl。

若要實作 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 檔案。

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

- 升級到實作 Java API for XML Programming (JAXP) 最新規格 (http://java.sun.com/xml/jaxp/index.html) 的新版本應用程式。
- 從 C:\Program Files\IBM\Java50\jre\lib 中移除 jaxp.properties 檔案。
- 在 C:\Program Files\IBM\Java50\jre\lib 的 jaxp.properties 檔案中，移除項目的註解符號。
- 使用 IBM_JAVA_OPTIONS 環境變數來明確設定 SAX Parser、DocumentBuilder 或 Transformer Factory。例如：

      set IBM_JAVA_OPTIONS=-Djavax.xml.parsers.SAXParserFactory=
        org.apache.xerces.jaxp.SAXParserFactoryImpl

  或

      set IBM_JAVA_OPTIONS=-Djavax.xml.parsers.DocumentBuilderFactory=
        org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

  或

      set IBM_JAVA_OPTIONS=-Djavax.xml.transform.TransformerFactory=
        org.apache.xalan.processor.TransformerFactoryImpl

- 從您的應用程式的程式碼內，設定 javax.xml.parsers.SAXParserFactory，javax.xml.parsers.DocumentBuilderFactory 或 javax.xml.transform.TransformerFactory 的系統內容。如需相關範例，請參閱 JAXP 1.3 規格。

# 使用 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 及其用法的相關資訊，請造訪下列網站：

- http://java.sun.com/products/jpda/
- http://java.sun.com/j2se/1.5.0/docs/guide/jpda/
- http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdb.html

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

某些 Java 應用程式必須能夠判定目前是在 32 位元 JVM 或 64 位元 JVM 上執行。比方說，如果應用程式包含原生的程式碼庫，則程式庫必須分別以 32 和 64 位元格式編譯，以滿足支援 32 和 64 位元作業模式的平台。在此情況下，應用程式必須在執行時期載入正確的程式庫，因為 32 和 64 位元程式碼無法混合。

系統內容 com.ibm.vm.bitmode 可讓應用程式判定執行 JVM 的模式。傳回值如下：

- 32 - JVM 在 32 位元模式下執行
- 64 - JVM 在 64 位元模式下執行

在應用程式碼中，您可以利用下列呼叫來檢查 com.ibm.vm.bitmode：

    System.getProperty("com.ibm.vm.bitmode");

## 撰寫 JNI 應用程式

原生程式在 JNI_CreateJavaVM() API 呼叫上可以指定的有效 JNI 版本號碼為：

- JNI_VERSION_1_2(0x00010002)
- JNI_VERSION_1_4(0x00010004)

此版本號碼只決定要使用的 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 的網頁的 URL

例如，若要在呼叫 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 服務人員也可能對此提出要求。追蹤由三個系統內容來控制。

- 若要啟用追蹤，請設定 `com.ibm.CORBA.Debug=true`。
- 若要格式化和新增至收送的追蹤 GIOP 訊息，請設定 `com.ibm.CORBA.CommTrace=true`。依預設，ORB 追蹤會輸出至 orbtrc.DDMMYYYY.HHmm.SS.txt 名稱格式的檔案。
- 若要傳送到不同檔案，請設定 `com.ibm.CORBA.Debug.Output=<filename>`。

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

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

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

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

### 用來調整 ORB 的系統內容

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

- 若要控制 GIOP 1.2 片段化，請設定系統內容 com.ibm.CORBA.FragmentSize。

  例如，若要將片段大小設為 4096 位元組：

      java -Dcom.ibm.CORBA.FragmentSize=4096 myapp

  預設的片段大小是 1024 位元組。您可以將片段大小設為 0 來停用片段化。

- 在異質網路中，對 CORBA 要求的回應可能延遲或遺失。您可以使用系統內容 com.ibm.CORBA.RequestTimeout 來設定最長等待時間。另外，您也可以使用 com.ibm.CORBA.LocateRequestTimeout 來控制 LocateRequests 的逾時值。例如，若要限制這兩者的延遲時間為 30 秒，請鍵入：

      java -Dcom.ibm.CORBA.RequestTimeout=30
           -Dcom.ibm.CORBA.LocateRequestTimeout=30 myapp

  依預設，ORB 會無限期地等待回應。請勿將逾時值設得太低，以避免連線不必要地結束。

- 如果您的程式在網路中提供服務，則供 ORB 讀取送入要求的埠號可能需要設為知名埠號。您可以使用系統內容 com.ibm.CORBA.ListenerPort 來控制此值。

  例如，若要讓 ORB 使用埠號 1050，請鍵入：

      java -Dcom.ibm.CORBA.ListenerPort=1050 myapp

  如果設定這個內容，則 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 實作類別如下：

- org.omg.CORBA.ORBClass=com.ibm.CORBA.iiop.ORB
- org.omg.CORBA.ORBSingletonClass=com.ibm.rmi.corba.ORBSingleton
- javax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.UtilDelegateImpl
- javax.rmi.CORBA.StubClass=com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl
- javax.rmi.CORBA.PortableRemoteObjectClass= com.ibm.rmi.javax.rmi.PortableRemoteObject

這些是預設值，建議您不要設定這些內容或直接參照實作類別。為了提高可攜性，請您只參照 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-IIOP Programmer's Guide 是撰寫 RMI-IIOP 程式的簡介。安裝本文件是已安裝這本手冊。
- 示範目錄包含：
  - "Hello World" 範例，可以在 Java 遠端方法通訊協定 (JRMP) 和 IIOP 通訊協定之間切換 (demo\rmi-iiop\hello)
  - 與標準 IDL 程式 (demo\rmi-iiop\idl) 互動的 "Hello World" 範例
- Java Language to IDL Mapping 文件是 RMI-IIOP 的詳細技術規格，位於：
  http://www.omg.org/cgi-bin/doc?ptc/00-01-06.pdf

## 實作 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 的應用程式之間，解決埠擁有權爭奪的問題
- 透過事件通知執行非同步和同步 I/O 埠監控
- 接收 Bean 格式的事件，其說明埠的狀態變更

## 安裝 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. 將檔案解壓縮。解壓縮的檔案如下所示：
   - jre\lib\ext\comm.jar
   - jre\bin\ibmcomm.dll
   - jre\lib\javax.comm.properties
   - docs\javacomm\License.html

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

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

## 配置 Java Communications API

安裝 Java Communications API 之後，您必須：

- 變更序列埠和並列埠的存取模式。
- 如果您在安裝 Java 時未設定 PATH，請設定。請參閱設定 PATH。

## Java Communications API 列印限制

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

## 解除安裝 Java Communications API

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

- jre\lib\ext\comm.jar
- jre\bin\ibmcomm.dll
- jre\lib\javax.comm.properties
- docs\javacomm\License.html

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 套件的所有功能。

- 系統會為這些功能中的某些功能擲出 sun.plugin.dom.exception.NotSupportedException。
- 當瀏覽器不支援特定的功能時，系統便會擲出 sun.plugin.dom.exception.InvalidStateException。

### 使用 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 檔案的編碼：

- Internet Explorer 5/6「檢視」功能表 -> 「編碼」
- Netscape 4：「檢視」功能表 -> 「字元集」
- Netscape 6：「檢視」功能表 ->「字元編碼」

## 使用 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/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。

### 執行 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 指令行選項來啟用和配置。

|

|
- -Xscmx<size>[k|m|g] | |
  |
  - 指定快取大小。這個選項適用的條件是已建立快取，而且沒有同名的現有快取。預設的快取大小視平台而定。您可以查出正在使用的大小值，方法為新增 -verbose:sizes 作為指令行引數。最小快取大小為 4 kB。最大快取大小也一樣視平台而定（請參閱快取大小的限制）。
|
- -Xshareclasses:<suboption1>[,<suboption2>...] | |
  |
  - 啟用類別共用。可以使用許多子選項，部分為快取公用程式。快取公用程式可以直接在指定的快取上執行必要的作業，不必啟動 VM。您可以合併多個子選項一起使用，並以逗點區隔，但快取公用程式彼此互斥。
  |您可以在 -Xshareclasses 選項中搭配下列子選項，例如 -Xshareclasses:help | |
  |
  - help | |
    |
    - 列示所有指令行選項。
  |
  - name=<name> | |
    |
    - 連接到指定名稱的快取，如果快取不存在，則建立快取。請使用 listAllCaches 公用程式選項來顯示目前可用的快取。如果您不指定名稱，則會將預設名稱 "sharedcc_" 與現行使用者名稱結合來建立快取名稱。
  |
  - verbose | |
    |
    - Verbose 提供快取 I/O 活動的詳細輸出，對於儲存和找到的類別，列出相關資訊。每一個類別載入器各有一個專屬 ID（bootstrap 載入器一律為 0），輸出會顯示運作中類別載入器階層，其中，類別載入器本身必須向上層取得類別之後，才能載入類別。通常會有許多失敗的要求；這在類別載入器階層中，屬於預期的行為。請注意，如果已啟用類別共用，則標準選項 -verbose:class 也會啟用類別共用詳細輸出。
  |
  - modified=<modified context> | |
    |
    - 如果已安裝位元組碼代理程式，且可能在執行時期修改位元組碼，則需要此選項。如果已安裝位元組碼代理程式，但您未指定此選項，則快取中不會儲存或找到任何類別。<modified context> 是使用者選擇的描述子；例如 "myModification1"。這會分割快取，只讓使用環境定義 myModification1 的 JVM 才能共用相同的類別。比方說，如果您以修正環境定義來執行 "HelloWorld"，然後以不同的修正環境定義再執行一次，則會看到所有類別在快取中儲存兩次。
  |
  - destroy（公用程式選項） | |
    |
    - 摧毀 name=<name> 子選項中指定名稱的快取。如果不指定名稱，則會摧毀預設的快取。只有當所有使用到快取的 VM 已關閉且使用者有足夠的許可權時，才可以摧毀快取。
  |
  - destroyAll（公用程式選項） | |
    |
    - 嘗試摧毀使用者可用的所有快取。只有當所有使用到快取的 VM 已關閉且使用者有足夠的許可權時，才可以摧毀快取。
  |
  - expire=<time in minutes> |（公用程式選項） | |
    |
    - 摧毀在一段指定的時間內未使用的所有快取。
  |
  - listAllCaches（公用程式選項） | |
    |
    - 列出系統上所有的快取，並說明是否正在使用及前次使用的時間。
  |
  - printStats（公用程式選項） | |
    |
    - 顯示 name=<name> 子選項指定之快取的摘要統計資訊。如果不指定名稱，則會顯示預設快取的統計資料。其中最有用的資訊是快取的飽和程度及包含多少類別。請注意，「過時 (stale)」類別是指檔案系統上已更新的類別，也因此被快取標示為「過時」。快取不會清除過時類別。如需相關資訊，請參閱 Diagnostics Guide。
  |
  - printAllStats（公用程式選項） | |
    |
    - 對 name=<name> 子選項指定的快取，顯示快取內容的詳細資訊。如果不指定名稱，則會顯示預設快取的統計資料。每一個類別會依時間順序列出，同時顯示類別載入位置的參照。如需相關資訊，請參閱 Diagnostics Guide。

| |

## 建立、移入、監視及刪除快取

|

若要啟用類別共用，請將 -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。快取記憶體將會受到下列因素所限制：

|

|

|
- 可用的磁碟空間。磁碟上會建立檔案，將類別資料儲存在使用者設定檔下的 "javasharedresources" 目錄中。這個目錄通常設為 C:\Documents and Settings\<username>\Application Data\。Windows 每次重新啟動時會刪除這個檔案。
|
- 可用的虛擬位址空間。由於共用類別快取與 Java 資料堆之間會共用程序的虛擬位址空間，因此增加 Java 資料堆的大小上限，會縮減您可以建立的共用類別快取大小。

| |

### 執行時期位元組碼修正

|

如果 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 32-bit SDK for Windows 5.0 版 支援下列語言環境：
  - 孟加拉文 (bn_IN)
  - 馬來亞拉姆文 (ml_IN)
  - 奧里亞文 (or_IN)
  不過，這些語言環境的字型可能無法在 AWT 元件中使用。

- IBM 32-bit SDK for Windows 5.0 版 支援 IPv6。|然而，因為 Windows 中目前的 IPv6 支援不是雙層架構，SDK 在會模擬 IPv6 系統上的雙層式行為。由於模擬的本質，您的 Java 應用程式最多只能使用兩倍的 Socket。若要停用模擬，請將系統內容 java.net.preferIPv4Stack 設為 `true`，在 SDK 中停用 IPv6 支援。

- 使用輸入法編輯器 (IME) 時，建議您在將工作區用於任何其他作業之前，應該先完成字元組合以及選取所要文字的作業。

- 建立長度異常的 DSA 金鑰組會造成慢速機器上的執行時間過久。此延遲現象不算是當機，因為只要時間夠久，程序最終仍會完成。DSA 金鑰產生演算法已最佳化，可以更快建立標準的金鑰長度（例如 512、1024）。

- 個人防火牆可能造成 Windows NIO 程式碼發生問題，導致特定的作業失敗。例如，方法呼叫 Selector.open() 可能擲出 `java.io.IOException：無法建立迴路連線`，並指出原因 `java.net.ConnectException：拒絕連線：connect`。此異常狀況是因為作業系統連接的埠被防火牆阻斷而引起。JVM 會重試連接作業，要求作業系統選擇不同的埠號。重試幾次之後，如果仍然無法連接，則會擲出 `ConnectException`。

  如果出現此異常狀況，您可以設定系統內容 java.nio.debug=pipe，查看目前阻斷哪些埠號。

- 當使用 IME 時，若使用者在 AWT 文字區輸入文字, 並且在確定文字前重新調整應用程式的視窗大小，則將會自動確定文字。

- 在 Windows 2000 和 XP 上，預設可同時開啟的檔案數目太小，將造成 I/O 密集的應用程式發生問題。若要修正這項限制，請編輯 <windows>\system32\CONFIG.NT 檔案，並設定下列值：
  - `files=200`
  - `buffers=60`
  其中 <windows> 是 Windows 的安裝目錄。

- 在色彩濃度為 32 位元的 Windows 2000 上，JVM 的 DirectDraw 機制不會重繪滑鼠指標底下的區域。當滑鼠經過功能表之後，結果將留下灰色或黑色的方框。解決方法是關閉直接繪製 (`-Dsun.java2d.noddraw`)，或將螢幕色彩解析度改為其他值，例如 256 色。

- 將 PKCS 11 原生程式庫安裝到 1.4.x 版 JVM 時，您必須將程式庫和其他 JRE 原生程式庫一起放在 JRE bin 目錄中。

- NIO SocketChannel finishConnect() 呼叫會傳回 `true`（已連接通道）或 `false`（連線程序尚未完成），或擲出異常狀況。在 Windows 2000 上，當使用非阻斷連線時，即使前一個 java select() 呼叫暗示已有通道可以處理，仍然可能傳回 `false`。

- 您無法在執行時期變更 Java main 執行緒（亦稱為原始執行緒）的堆疊範圍。main 執行緒固定大小為 256 KB，這是基於效能理由而決定的最佳值。您只能對 main 以外的其他執行緒使用 -Xss 選項來修改堆疊範圍。由於 main 執行緒有此固定大小，建議您不要強迫執行太多遞迴活動，因為 main 執行緒比其他執行緒更易於發生堆疊溢位。

- 如果您在 JTextArea、JTextField 或 JFileChooser 中輸入 DBCS 字元，則將某些「中文 IME」（尤其是「中文內碼」和 Zhengma）切換成「智慧型 ABC IME」時，可能會造成當機。

- 關於捷克文的使用者，請注意 installshield 的語言選擇畫面上有一個未翻譯的項目。這項限制是由 installshield 所導致。字串會依據字碼頁從作業系統中挑選。因為波蘭文（依此翻譯安裝作業）和捷克文的字碼頁都是 1250，Installshield 對這兩種語言會嘗試從系統中擷取一份語言清單，導致這個字串出現在語言清單中。

- 如果您使用的是繁體中文，在 Java 應用程式中，請勿直接使用 | more 指令來輸出。而應將輸出導至暫存檔，然後分別檢視該檔案。

- 關於加泰蘭文的使用者，應使用 Lucida Console 字型來避免加重音大寫字母毀損。這僅影響 Windows 2000 的使用者。

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

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

- 使用電子郵件：idrcf@hursley.ibm.com。
- 使用傳真：
  - 從英國：01962 842327
  - 從其他地區：<國碼>44 1962 842327
- 使用郵寄方式：
  IBM United Kingdom Ltd
  User Technologies,
  Mail Point 095
  Hursley Park
  Winchester
  Hampshire
  SO21 2JN United Kingdom

補充說明。 選擇傳送訊息給 IBM 即代表您同意訊息中包含的所有資訊，包括回應資料，如問題、意見、建議，或類似資料，均得視為非機密資訊，而且，關於此類資訊，IBM 並無任何義務，且 IBM 得自由重製、使用、公開及散佈此等資訊予他人，不受任何限制。此外，IBM 亦得自由將此種資訊中所含的任何想法、概念、知識或技術用於任何用途，包括但不限於開發、製造及行銷包含此種資訊的產品。

# 注意事項

本資訊乃是針對在美國提供的產品及服務而撰寫。IBM 可能不會在其他國家提供本文件討論的產品、服務或功能。要知道在您所在之區是否可用到這些產品與服務時，請向當地的 IBM 服務代表查詢。本書在提及 IBM 的產品、程式或服務時，不表示或暗示只能使用 IBM 的產品、程式或服務。只要未侵犯 IBM 的智慧財產權，任何功能相當的產品、程式或服務都可以取 代 IBM 的產品、程式或服務。不過，其他非 IBM 產品、程式或服務在運作上的評價 與驗證，其責任屬於使用者。

在這文件中包含著 IBM 所擁有之專利或暫准專利。使用者不享有本文件內容之專利權。您可以用書面方式來查詢授權，來函請寄到：

- IBM Director of Licensing
  IBM Corporation
  North Castle Drive, Armonk
  NY 10504-1758 U.S.A.

若要查詢有關二位元組 (DBCS) 資訊的特許權限事宜，請聯絡您國家的 IBM 智慧財產部門，或者用書面方式寄到：

- IBM World Trade Asia Corporation Licensing
  2-31 Roppongi 3-chome, Minato-ku
  Tokyo 106-0032, Japan

下列段落若與該國之法律條款抵觸，即視為不適用：

IBM 僅以現狀提供本書，而不提供任何明示或默示之保證（包括但 不限於可商用性或符合特定效用的保證）。有些地區在某些固定的交易上並不接受明示或默示保證的放棄聲明，因此此項 聲明不見得適用於您。

本資訊中可能會有技術上或排版印刷上的訛誤。因此，IBM 會定期修訂； 並將修訂後的內容納入新版中。同時，IBM 得隨時改進及（或）變動本資訊中所 提及的產品及（或）程式。

本資訊中任何對非 IBM 網站的敘述僅供參考，IBM 對該網站並不提供保證。該網站上的資料，並非本 IBM 產品所用資料的一部分，如因使用該網站 而造成損害，其責任由 貴客戶自行負責。

IBM 得以各種適當的方式使用或散佈由 貴客戶提供的任何資訊，而無需對您負責。

本程式之獲授權者若希望取得相關資料，以便使用下列資訊者可洽詢 IBM。其下列資訊指的是： (1) 獨立建立的程式與其他程式（包括此程式）之間更換資訊的方式； (2) 相互使用已交換之資訊方法。 若有任何問題請聯絡：

- JIMMAIL@uk.ibm.com
  [Hursley Java Technology Center (JTC) contact]

上述資料得遵循適當條款而取得，在某些情況下必須付費方得使用。

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/ 所開發之軟體。