Date: 2005-10-17

# IBM SDK and Runtime Environment for Linux platforms, Java 2 Technology Edition 5.0 版

# 使用手冊

# 版權資訊

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

這一版的「使用手冊」適用於：

- IBM 32-bit SDK and Runtime Environment for Linux on Intel architecture, Java 2 Technology Edition 5.0 版
- IBM 64-bit SDK and Runtime Environment for Linux on AMD64/EM64T architecture, Java 2 Technology Edition 5.0 版
- IBM 32-bit SDK and Runtime Environment for Linux on iSeries and pSeries, Java 2 Technology Edition 5.0 版
- IBM 64-bit SDK and Runtime Environment for Linux on iSeries and pSeries, Java 2 Technology Edition 5.0 版
- IBM 31-bit SDK and Runtime Environment for Linux on zSeries, Java 2 Technology Edition 5.0 版
- IBM 64-bit SDK and Runtime Environment for Linux on zSeries, 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) SDK and Runtime Environment for Linux(TM) platforms, Java(TM) 2 Technology Edition 5.0 版的一般資訊，以及 IBM 實作與 Sun 實作之任何差異的相關特定資訊。請同時參閱本「使用手冊」以及 Sun 網站上內容更廣泛的文件：http://java.sun.com。

如需已測試 SDK 及 Runtime Environment for Linux 的發行版清單，請參閱：http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html。

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

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

檢視本 5.0 版「使用手冊」的 HTML 版本或彩色印行本時，對其技術上的變更（非次要或明顯之變更，如將 "1.4.2" 更新為 "5.0"）均以紅字標明，且在變更處左側也會加上垂直線。

# 目錄

版權資訊
前言
概觀
慣例
版本相容性
SDK 升級
移轉自其他 IBM JVM
| |
受支援的 zSeries 硬體
SDK 和 Runtime Environment 的內容
Runtime Environment 工具
SDK 工具
安裝及配置 SDK 和 Runtime Environment
在 Red Hat Enterprise Linux (RHEL) 4 上安裝
| |
在 64 位元架構上安裝 32 位元 SDK
從 RPM 檔安裝
從 .tgz 檔安裝
配置 SDK 和 Runtime Environment for Linux
設定 PATH
設定 CLASSPATH
解除安裝 SDK 及 Runtime Environment for Linux
解除安裝可安裝的 Red Hat Package Manager (RPM) 套件
解除安裝壓縮的 Tape Archive (TAR) 套件
使用 Runtime Environment
選項
指定 Java 選項和系統內容
標準選項
非標準選項
取得 IBM 建置和版本號碼
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
變更序列埠和並列埠的存取模式
啟用 IBM ThinkPads 的序列埠
Java Communications API 列印限制
解除安裝 Java Communications API
解除安裝 Red Hat Package Manager (RPM) 可安裝套件
解除安裝 Tape Archive (TAR) 壓縮套件
Java Communications API 文件
部署 Java 應用程式
（僅適用於 Linux IA 32 位元和 PPC32）使用 Java 外掛程式
支援的瀏覽器
安裝和配置 Java Plug-in
Common Document Object Model (DOM) 支援
使用 DBCS 參數
（僅限 Linux IA 32 位元、PPC32 及 PPC64）使用 Web Start
執行 Web Start
移轉 Java 應用程式
| |
在 JVM 之間共用類別資料
| |
類別共用概觀
| |
快取內容
| |
快取的動態更新
| |
啟用類別共用
| |
快取安全
| |
快取有效期限
| |
快取公用程式
| |
使用指令行選項來共用類別
| |
建立、移入、監視及刪除快取
| |
效能和記憶體用量
| |
使用類別共用的限制和考量
| |
快取大小的限制
| |
執行時期位元組碼修正
| |
作業系統限制
| |
使用 SharedClassPermissions
| |
改寫類別載入器來共用類別
獨立軟體供應商的服務和支援
協助工具
iKeyman 協助工具
在 Swing 的 JComboBox 元件中執行鍵盤遍訪
（僅限 Linux IA 32 位元、PPC32 及 PPC64）Web Start 協助工具
已知限制
適用於所有 Linux 平台的限制（除非另有指示）
Linux IA 32 位元限制
Linux AMD64 限制
Linux PPC 32 位元與 64 位元限制
Linux PPC 64 位元限制
Linux zSeries 64 位元限制
Linux zSeries 32 位元與 64 位元限制
對於本「使用手冊」是否有任何意見？
注意事項
商標

# 概觀

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

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

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

此外，對於 IA32、PPC32 及 AMD64/EM64T 平台，也提供 Java Communications 應用程式設計介面 (API) 套件，可搭配 Runtime Environment for Linux 一起使用。您可以在 使用 Java Communications API (JavaComm) 中找到它的相關資訊。

license_xx.html 檔案包含 Runtime Environment for Linux 軟體的授權合約 （xx 是語言縮寫）。若要檢視或列印授權合約，請在 Web 瀏覽器中開啟此檔案。

## 慣例

在整本「使用手冊」中，SDK 的預設安裝目錄是 /opt/ibm/java2-i386-50/。下列平台各有不同的預設安裝目錄； 當您看到 /opt/ibm/java2-i386-50/ 時，請依據您使用的平台更換為適合的目錄：

- Linux IA 32 位元：/opt/ibm/java2-i386-50/
- Linux AMD 64 位元：/opt/ibm/java2-x86_64-50/
- Linux PPC 32 位元：/opt/ibm/java2-ppc-50/
- Linux PPC 64 位元：/opt/ibm/java2-ppc64-50/
- Linux zSeries 31 位元：/opt/ibm/java2-s390-50/
- Linux zSeries 64 位元：/opt/ibm/java2-s390x-50/

## 版本相容性

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

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

## SDK 升級

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

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

## 移轉自其他 IBM JVM

在 AMD64/EM64T 1.4.2 版和其他 Linux 平台第 5 版，IBM Runtime Environment for Linux 包含新版的 IBM Java Virtual Machine 和 Just-In-Time (JIT) 編譯器。如果您從更舊版的 IBM Runtime Environment 移轉，請注意：

- JVM 共用程式庫 libjvm.so 安裝在 jre/bin/j9vm 目錄中。這不同於（舉例而言）Runtime Environment for Linux for Version 1.4.2（AMD64/EM64T 以外的其他所有平台），其中，安裝的目錄是 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

| | |

## 受支援的 zSeries 硬體

|

zSeries 31 位元和 64 位元 SDK 及 Runtime Environments 在下列的 System z9 和 zSeries 伺服器或對等系統上執行： |

|

|
- z9-109
|
- z990
|
- z900
|
- z890
|
- z800

# SDK 和 Runtime Environment 的內容

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

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

## Runtime Environment 工具

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

## SDK 工具

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

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

# 安裝及配置 SDK 和 Runtime Environment

您可以從 RPM 或 .tgz 檔安裝 IBM Java SDK 和 Runtime Environment。除非您要容許機器上的所有使用者存取這項 Java 安裝，否則請使用 .tgz 安裝方法。如果您沒有最高存取權，請使用 .tgz 檔。

如果您使用 RPM 檔進行安裝，Java 檔案會安裝在 /opt/ibm/java2-i386-50/ 中。本手冊中的範例是假設您將 Java 安裝在這個目錄中。

## 在 Red Hat Enterprise Linux (RHEL) 4 上安裝

SDK 視依預設不安裝的 Red Hat Enterprise Linux (RHEL) 4.0 共用程式庫而定。

包含這些程式庫的 RPM 有：

- `compat-libstdc++-33-3.2.3` 和 `xorg-x11-deprecated-libs-6.8.1`（Intel Architecture、PPC 和 PPC64）
- `compat-libstdc++-295-2.95.3` 和 `xorg-x11-deprecated-libs-6.8.1` (zSeries)

若要在 RHEL 4 安裝期間併入這些程式庫：

1. 進入套件預設值畫面後，選取自訂要安裝的套件集。
2. 在套件群組選項畫面的 X Windows System 下，選擇詳細資料，並確定您選取了 `xorg-x11-deprecated-libs`。
3. 在開發選項下，選取 Legacy Software Development。

| | |

## 在 64 位元架構上安裝 32 位元 SDK

|

若要執行 SDK，您必須安裝 SDK 所需的所有正確版本的程式庫，可分 32 位元或 64 位元。

|

在 RHEL4 中，相容性架構支援套件群組中提供 64 位元版本的套件。

|

您可以使用 RPM 工具來檢查您安裝了哪些版本的套件，方法為將選項 `--queryformat "%{NAME}.%{ARCH}\n"` 新增至 RPM 指令。例如： |

|

    /home/username : rpm --queryformat "%{NAME}.%{ARCH}\n" -q libstdc++
    |libstdc++.x86_64
    |libstdc++.i386

## 從 RPM 檔安裝

1. 開啟 Shell 提示（請確定您是 root 使用者）。
2. 在 Shell 提示上，鍵入 `rpm -ivh <RPM file>`。例如：

       |rpm -ivh ibm-java2-<arch>-sdk-5.0-0.0.<arch>.rpm

   或

       |rpm -ivh ibm-java2-<arch>-jre-5.0-0.0.<arch>.rpm

   |其中 `<arch>` 代表您的架構：i386、x86_64、ppc、ppc64、s390 或 s390x。

## 從 .tgz 檔安裝

1. 請建立一個目錄來儲存 Java 套件檔。本手冊中的範例是假設您安裝在 /opt/ibm/java2-i386-50/ 中。在本手冊的其餘部分，請將 /opt/ibm/java2-i386-50/ 取代為您在其中安裝 Java 的目錄。
2. 在 Shell 提示上，鍵入 `tar -zxvf <.tgz file>`。例如：

       |tar -zxvf ibm-java2-sdk-50-linux-<arch>.tgz

   或

       |tar -zxvf ibm-java2-jre-50-linux-<arch>.tgz

   |其中 `<arch>` 代表您的架構：i386、x86_64、ppc、ppc64、s390 或 s390x。

## 配置 SDK 和 Runtime Environment for Linux

### 設定 PATH

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

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

您每次可以在工具名稱前面鍵入路徑，指定工具的路徑。比方說，如果 SDK for Linux 安裝在 /opt/ibm/java2-i386-50/bin，您可以 在 Shell 提示下鍵入下列指令，編譯檔案 myfile.java：

      /opt/ibm/java2-i386-50/bin/javac myfile.java

若要變更 PATH 環境變數：

1. 編輯起始目錄中的 Shell 啟動檔（通常是 .bashrc，視您的 Shell 而定），並將絕對路徑新增至 PATH 環境變數；例如：

       export PATH=/opt/ibm/java2-i386-50/bin:/opt/ibm/java2-i386-50/jre/bin:$PATH

2. 重新登入，或執行更新的 Shell Script，讓新的 PATH 設定生效。

### 設定 CLASSPATH

CLASSPATH 會指示 SDK 工具 （例如 java、javac 及 javadoc）到何處尋找 Java 類別庫。

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

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

若要顯示 CLASSPATH 的現行值，請在 Shell 提示下鍵入：

      echo $CLASSPATH

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

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

註:
（僅限 Linux IA 32 位元中文版使用者） 由於 Red Hat Advanced Server 的字型編碼不一致，當您要在中文為預設值的環境下進行安裝時，建議最好先以英文為預設語言進行安裝，安裝完成後再變更為中文。否則，可能會發生無法顯示中文字型的錯誤。

## 解除安裝 SDK 及 Runtime Environment for Linux

您移除 SDK 及 Runtime Environment for Linux 所用的程序視您使用的安裝類型而定。請參閱解除安裝 Red Hat Package Manager (RPM) 套件或解除安裝壓縮的 Tape Archive (TAR) 套件以取得指示。

### 解除安裝可安裝的 Red Hat Package Manager (RPM) 套件

若要解除安裝 SDK 或 Runtime Environment for Linux（如果您安裝了可安裝的 RPM 套件）：

1. 在 Shell 提示上，
   1. 若要檢查您已安裝哪些 RPM 套件，請鑑入：

          rpm -qa | grep -i java

   2. 您會看到您已安裝的所有 IBM Java 套件的清單； 例如：

          ibm-java2-<arch>-jre-5.0-0.0.<arch>
          ibm-java2-<arch>-sdk-5.0-0.0.<arch>

   3. 這個輸出告知您可以使用 `rpm -e` 指令解除安裝哪些套件；例如：

          rpm -e ibm-java2-<arch>-jre-5.0-0.0.<arch>
          rpm -e ibm-java2-<arch>-sdk-5.0-0.0.<arch>

   另外，也可以使用像 kpackage 或 yast2 這類的圖形式工具
2. 從 PATH 陳述式移除您安裝 SDK 和 Runtime Environment 的目錄。
3. （僅限 Linux IA 32 位元及 PPC32）如果已安裝 Java 外掛程式，請從 Web 瀏覽器目錄中移除 Java 外掛程式檔案。

### 解除安裝壓縮的 Tape Archive (TAR) 套件

若要解除安裝 SDK 或 Runtime Environment for Linux（如果您解壓縮了壓縮的 TAR 套件）：

1. 從您安裝 SDK 或 Runtime Environment 的目錄中移除 SDK 或 Runtime Environment 檔案。
2. 從 PATH 陳述式移除您安裝 SDK 或 Runtime Environment 的目錄。
3. 重新登入或是執行更新的 Shell Script 來啟動新的 PATH 設定。
4. （僅限 Linux IA 32 位元及 AMD64/EM64T）如果已安裝 Java 外掛程式，請從 Web 瀏覽器目錄中移除 Java 外掛程式檔案。

# 使用 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，例如 `export 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]||[subpool]（PPC 和 zSeries 上的子儲存池）
  - 控制「記憶體回收器」的行為。optthruput 選項是預設值，可以對應用程式提供極高產能，代價是必須忍受偶而的暫停。optavgpause 選項可以 縮短這種記憶體回收暫停的時間，節制資料堆大小增加對於記憶體回收暫停時間所造成 的影響。如果您的配置有很大的資料堆，請使用 optavgpause。gencon 選項 要求結合並行與世代 GC 一起使用，以縮短任何記憶體回收暫停的時間。|subpool 選項利用改良的物件配置演算法，在資料堆上配置物件時，可以達到更高的效能。在大型 SMP 系統上，此選項可以提高效能。 如需相關資訊，請參閱 指定記憶體回收原則。
- -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
  - 要求 JVM 以大型分頁來配置 Java 資料堆。如果無法使用大型分頁，JVM 不會啟動，將會顯示錯誤訊息 `GC：系統配置不支援選項 --> '-Xlp'`。JVM 使用 shmget() 來為資料堆配置大頁面。在執行 Linux 核心 2.6 版或更新版本的系統，或發行套件已移植大型分頁支援的舊版核心系統上，支援大型分頁。依預設不使用大型分頁。請參閱配置大頁面記憶體配置。
- -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 建置和版本號碼，請在 Shell 提示下鍵入：

        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 傳回的詳細錯誤說明及其他除錯資訊是英文。

## 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" 或空字串。

  在指令提示下鍵入：

  1. Korn Shell：

     -         export JAVA_COMPILER=NONE

       （本使用手冊的其餘部分會使用 Korn Shell 指令。）

  2. Bourne Shell：

     -     JAVA_COMPILER=NONE

     -     export JAVA_COMPILER

  3. C Shell：

     -     setenv JAVA_COMPILER NONE

- 在 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 會保留停用狀態。若要適當地取消設定環境變數， 在 Shell 提示上鍵入 `unset 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|、subpool|（僅限 PPC 和 zSeries） 或 gencon。該選項會控制記憶體回收器的行為，在應用程式和整體系統的產能以及因記憶體回收所造成的暫停時間之間找出平衡點。

該選項及其值的格式為：

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

> -Xgcpolicy:gencon

|

> -Xgcpolicy:subpool（僅限 PPC 和 zSeries）

### 暫停時間

當應用程式嘗試建立一個物件，但資料堆中的可用空間無法立即滿足要求時，記憶體回收器便會負責來識別未參照的物件（可回收的記憶體）、刪除它們，並讓資料堆返回到可以快速滿足即時及後續配置要求的狀態。這種記憶體回收循環偶而會造成應用程式碼意外地暫停。當應用程式的大小及複雜度增加時，資料堆隨之變大。此記憶體回收暫停時間的大小及有效位數也會有增加的趨勢。 預設的記憶體回收值 -Xgcpolicy:optthruput 對應用程式提供非常高的產能，缺點是可能出現這些偶而的暫停現象，可能從幾毫秒到許多秒的時間，視資料堆大小和回收數量而定。

### 減少暫停時間

JVM 利用兩項技術來短縮暫停時間：

- 並行記憶體回收
- 世代記憶體回收

-Xgcpolicy:optavgpause 指令行選項要求使用並行記憶體回收，以明顯縮短記憶體回收暫停的時間。並行 GC 會在程式正常執行的同時執行一些記憶體回收活動，讓資料堆回收所造成的破壞程度降到最低，藉以縮短暫停時間。-Xgcpolicy:optavgpause 選項也會限制記憶體大小增加對於記憶體回收暫停時間長短的影響。-Xgcpolicy:optavgpause 選項在具有大量堆疊的配置中非常有用。隨著暫停時間縮短，應用程式的產能可能也會稍微降低。

在並行記憶體回收期間，許多時間浪費在辨別無法回收的長久物件上。如果 GC 只專注在最可能回收的物件上，則可以進一步縮短部份應用程式的暫停時間。世代 GC 將資料堆分割成「培育區 (nursery)」和「正式區 (tenure)」兩個「世代」來達成這個目標。物件視經歷時間放入其中一個區域。培育區較小，存放剛出現不久的物件；正式區較大，存放出現較久的物件。物件會先分配到培育區內，如果存活時間夠長，最後會晉升到正式區。

世代 GC 假設大部份物件不會存活太久。世代 GC 專注於回收培育區的儲存體，因為此區空間最有可能回收，藉以縮短暫停時間。培育區回收次數較頻繁，且不是偶而暫停一下，而是長時間暫停來回收整個資料堆，如果培育區很小，暫停時間就會很短。然而，世代 GC 的缺點是經過一段時間之後，如果太多物件存活太久，正式區即可能飽和。在此情況下，為了縮短暫停時間，請結合並行 GC 與世代 GC 一起 使用。-Xgcpolicy:gencon 選項要求結合並行與世代 GC 一起使用，以縮短任何記憶體回收暫停的時間。

### 資料堆近乎飽和的環境

如果 Java 資料堆變得近乎飽和，並且只收回非常少量的可回收的記憶體時，對於新物件的要求便可能無法立即滿足，因為並沒有立即可用的空間。如果資料堆在操作時其容量接近飽和，則不論使用的是上述的何種選項，應用程式的效能可能會變糟；而且，如果持續要求更多的資料堆空間，應用程式便會收到「記憶體不足」的異常狀況，如果無法掌握及處理這個異常狀況，便會造成 JVM 的終止。在此情況下，JVM 會產生 "javadump" 診斷檔案。在這些狀況下，建議您使用 -Xmx 選項來增加資料堆的大小，或是減少使用中應用程式物件的數目。如需相關資訊，請參閱 Diagnostics Guide。

## JVM 如何處理信號

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

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

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

對於異常狀況和錯誤信號，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 使用的其他信號作為內部控制用途，不會造成終止。唯一有關的控制信號是 SIGQUIT，它會導致 Javadump 產生。

### JVM 使用的信號

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

- 異常狀況：每當發生嚴重的狀況時，作業系統就同步發出適當的異常狀況信號。
- 錯誤：JVM 在偵測到無法回復的狀況時，就發出 SIGABRT。
- 岔斷：從 JVM 程序以外非同步發出岔斷信號來要求關機。
- 控制：供 JVM 作為控制用途的其他信號。

表 1. JVM 使用的信號
信號名稱 | 信號類型 | 說明 | 透過 -Xrs 來停用
--- | --- | --- | ---
SIGBUS | 異常狀況 | 記憶體存取不正確（資料排列錯誤） | 是
SIGSEGV | 異常狀況 | 不正確存取記憶體（寫入無法存取的記憶體） | 是
SIGILL | 異常狀況 | 不合法指令（嘗試呼叫不明的機器指令） | 否
SIGFPE | 異常狀況 | 浮點數異常（除數為零） | 是
SIGABRT | 錯誤 | 異常終止。JVM 一偵測到 JVM 錯誤就發出此信號。 | 是
SIGINT | 岔斷 | 互動式岔斷 (CTRL-C)。JVM 正常結束。 | 是
SIGTERM | 岔斷 | 終止要求。JVM 將正常結束。 | 是
SIGHUP | 岔斷 | 關機。JVM 正常結束。 | 是
SIGQUIT | 控制 | 終端機的結束信號。JVM 使用此信號來取得 Javadumps。 | 是
|SIGTRAP (5) | |控制 | |由 JIT 使用。 | |是
|__SIGRTMAX - 2 | |控制 | |由 SDK 使用。 | |否
|SIGCHLD | |控制 | |由 SDK 作為內部控制之用。 | |否

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

在 JVM 執行緒上，信號 `1 (SIGHUP)`、`2 (SIGINT)`、`4 (SIGILL)`、`7 (SIGBUS)`、`8 (SIGFPE)`、`11 (SIGSEGV)` 及 `15 (SIGTERM)` 會造成 JVM 關閉； 因此，應用程式信號處理程式不應該嘗試回復這些狀況，除非不再需要 JVM。

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

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

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

若要使用 libjsig.so：

- 將它與建立或內嵌 JVM 的應用程式鏈結起來：

      gcc -L$JAVA_HOME/bin -ljsig -L$JAVA_HOME/bin/j9vm -ljvm java_application.c

  或
- 使用 LD_PRELOAD 環境變數：

      export LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application（bash 和 ksh）

      setenv LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (csh)

  （假設 `JAVA_HOME` 已設定；否則，請使用 /opt/ibm/java2-i386-50/jre。）

如果您安裝的信號處理程式使用 `sigaction()`，則 JVM 在使用信號時不會注意到部 份的 sa_flags。包括：

- SA_NOCLDSTOP - 一律不設定。
- SA_NOCLDWAIT - 一律不設定。
- SA_RESTART - 一律設定。

libjsig.so 程式庫也會隱藏 JVM 信號處理程式，讓應用程式無法查覺。因此，在 JVM 啟動之後執行的 `signal()`、`sigset()` 及 `sigaction()` 等呼叫不再傳回 JVM 信號處理程式的參照，改傳回 JVM 啟動之前所安裝的任何一個處理程式。

## 使用浮動堆疊

特定的 Linux 程式模組散布 - 例如 Red Hat - 已啟用一項 GLIBC 功能，稱為「浮動堆疊 (floating stack)」。由於 Linux Kernel 的限制，如果核心層次小於 2.4.10，則 JVM 無法在啟用浮動堆疊的 SMP 上執行。在此環境下，必須在 JVM 或任何啟動 JVM 的應用程式啟動之前停用浮動堆疊。在 Red Hat 上，請使用此指令匯出環境變數來停用浮動堆疊：

    export LD_ASSUME_KERNEL=2.2.5

在無浮動堆疊的 Linux 系統上，不論 -Xss 如何設定，每一個執行緒的原生堆疊大小至少保證為 256 KB。在浮動堆疊的 Linux 系統上，則以 -Xss 值為準。因此，如果您從無浮動堆疊的 Linux 系統移轉，您必須確定任何 -Xss 值夠大，不要依賴最小值 256 KB。

## 轉換 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 檔案中的登錄（位於 /opt/ibm/java2-i386-50/jre/lib），或
- 將 javax.xml.transform.TransformerFactory 鍵值的系統內容設為 org.apache.xalan.xsltc.trax.TransformerFactoryImpl。

若要實作 jaxp.properties 檔案中的內容，請將 jaxp.properties.sample 複製到 /opt/ibm/java2-i386-50/中的 jaxp.properties。關於 TransformerFactory、SAXParserFactory 及 DocumentBuilderFactory 使用哪些實作方式，此檔案也包含決定程序的完整資料。

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

1. 檢查系統內容 org.apache.xalan.xsltc.dom.XSLTCDTMManager 的設定。
2. 在檔案 /opt/ibm/java2-i386-50/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) 的新版本應用程式。
- 從 /opt/ibm/java2-i386-50/jre/lib 中移除 jaxp.properties 檔案。
- 在 /opt/ibm/java2-i386-50/jre/lib 的 jaxp.properties 檔案中，移除項目的註解符號。
- 使用 IBM_JAVA_OPTIONS 環境變數來明確設定 SAX Parser、DocumentBuilder 或 Transformer Factory。例如：

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

  或

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

  或

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

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

# 使用 SDK 開發 Java 應用程式

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

## Java 應用程式除錯

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

### Java 除錯器 (JDB)

SDK for Linux 包含 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 下執行，並選擇適當的程式庫。

若要編譯和鏈結原生的應用程式與 IBM 5.0 SDK，請使用下列指令：

    gcc -I/opt/ibm/java2-i386-50/include -L/opt/ibm/java2-i386-50/jre/bin/j9vm
    -ljvm -ldl -lpthread <JNI program filename>

-ljvm 選項指定 libjvm.so 為實作 JVM 的 共用程式庫。-lpthread 選項表示您使用原生的 pthread 支援； 如果您不與 pthread 程式庫鏈結，則在執行 JNI 程序時，可能會造成分區段錯誤（信號 SIGSEGV）。

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

## 在阻斷的連接器上支援執行緒層次的復原

|

com.ibm.jvm 套件中增加四個新的 IBM 專用 SDK 類別，在阻斷的連接器上可支援執行緒層次的回復。新的類別都封裝在 core.jar 中。

|

這些類別可讓網路或同步呼叫上阻斷的執行緒消除障礙。如果應用程式未使用這些類別，則無法只中斷個別阻斷的執行緒，必須結束整個程序。

|

這些類別如下：

|

|
public Interface InterruptibleContext()
|
  定義 isblocked() 和 unblock() 兩個方法。其他三個類別都實作 InterruptibleContext。 |
|
public class InterruptibleLockContext()
|
  用來中斷同步呼叫的公用程式類別。 |
|
public class InterruptibleIOContext()
|
  用來中斷網路呼叫的公用程式類別。 |
|
public class InterruptibleThread()
|
  延伸 java.lang.Thread 的公用程式類別，可以將可中斷執行的方法封裝起來。此類別利用 InterruptibleLockContext 和 InterruptibleIOContext 的實例，根據阻斷執行緒的禍首是同步化作業或網路作業而定，執行必要的 isblocked() 和 unblock() 方法。 |
|

|

InterruptibleLockContext 和 InterruptibleIOContext 兩者會參照現行執行緒。因此，如果您不使用 InterruptibleThread，則必須經由延伸 java.lang.Thread 來提供自己的類別，才能使用這些新的類別。

|

這些類別的 Javadoc 隨 SDK 一起提供，位於檔案 docs/apidoc.zip 中。

## 使用 Applet

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

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

### 使用 Applet 檢視器執行 Applet

若要使用 Applet 檢視器來執行 Applet，請在 Shell 提示下鍵入：

       appletviewer name

其中 name 是下列其中一項：

- 呼叫 Applet 的 HTML 檔的檔案名稱
- 呼叫 Applet 的網頁的 URL

例如，若要在呼叫 Applet 的 HTML 檔上呼叫 Applet 檢視器，請在 Shell 提示下鍵入：

      appletviewer $HOME/filename.html

其中 filename 是 HTML 檔的名稱。

例如，`http://java.sun.com/applets/NervousText/example1.html` 是呼叫 Applet 的網頁 URL。若要在此網頁上呼叫 Applet 檢視器，請在 Shell 提示下鍵入：

    appletviewer http://java.sun.com/applets/NervousText/example1.html

Applet 檢視器無法辨識 <META> 標籤的 charset 選項。如果 appletviewer 載入的檔案未以系統預設值編碼，則可能發生 I/O 異常狀況。若要避免異常狀況，請在執行 appletviewer 時使用 -encoding 選項。例如：

    appletviewer -encoding JISAutoDetect sample.html

### 使用 Applet 檢視器進行 Applet 除錯

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

    cd demo/applets/TicTacToe
    ../../bin/appletviewer -debug example1.html

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

| | |

## 配置大頁面記憶體配置

|

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

|

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

|

大型分頁支援必須由核心提供並啟用，才能讓 Java 使用大型分頁。

|

若要配置大頁面記憶體配置，請先確定運作核心能夠支援大頁面。檢查檔案 /proc/meminfo 中是否含有下列字行： |

|

    HugePages_Total:     <頁數>
    |HugePages_Free:      <頁數>
    |Hugepagesize:        <分頁大小，KB>

可用的頁數及其大小視發行套件而定。

|

如果核心未提供大型分頁支援，則 /proc/meminfo 檔案中不會有這幾行。在此情況下，您必須安裝新的核心，內含大型分頁的支援。

|

如果具有大型分頁支援，但尚未啟用，則 `HugePages_Total` 等於 0。在此情況下，管理者必須啟用大型分頁支援。如需詳細指示，請參閱您的作業系統手冊。

|

若要讓 JVM 使用大型分頁，系統必須有足夠的連續大型分頁可用。如果無法配置大型分頁，即使有足夠的分頁可用，則可能表示大型分頁不連續。配置開機時的大型分頁數目可以建立連續的分頁。

|

JVM 必須具有 root 存取權，才能順利配置大型分頁。若要使用大型分頁，請以 root 身分執行 Java 或設定 Java 執行檔的 suid 位元。

## 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) 是選用性套件，可以搭配 IA32、PPC32/PPC64 及 AMD64/EM64T 平台上的 Runtime Environment for Linux 一起使用。JavaComm 與 SDK 或 Runtime Environment 各自 獨立安裝。

JavaComm API 為 Java 應用程式提供一種可在不同平台執行的方式，讓不同技術之間得以進行序列埠和並列埠通訊，例如語音郵件、傳真及智慧卡。撰寫應用程式的序列埠或並列埠通訊之後，就可以將那些檔案納入應用程式中。

Java Communications API 支援電子業協會 (Electronic Industries Association) (EIA)-232 (RS232) 序列埠和電機電子工程師協會 (Institute of Electrical and Electronics Engineers) (IEEE) 1284 並列埠，且在執行 IBM Version 5.0 Runtime Environment 的系統上也受到支援。

Java Communications API 的用途如下：

- 列出系統上的埠
- 開啟和宣告埠的擁有權
- 在使用 Java Communications API 的應用程式之間，解決埠擁有權爭奪的問題
- 透過事件通知執行非同步和同步 I/O 埠監控
- 接收 Bean 格式的事件，其說明埠的狀態變更

## 安裝 Java Communications API

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

如果您最初使用 RPM 套件來安裝 Java，請從 RPM 檔案安裝 Java Communications API。若要從 RPM 套件安裝 Java Communications API：

1. 開啟 Shell 提示，確定您的身分是 root。
2. 使用 `rpm -ivh` 指令，安裝 Java Communications API RPM 檔案。例如：

       rpm -ivh ibm-java2-<arch>-javacomm-5.0-0.0.<arch>.rpm

   Java Communications API 會安裝在 /opt/ibm/java2-i386-50/ 目錄結構內。

若要從 .tgz 檔案安裝 Java Communications API：

1. 將 Java Communications API 保存檔 ibm-java2-javacomm-50-linux-<arch>.tgz 放到 IBMJava2-50 目錄所在的目錄中。
2. 在 Shell 提示下，切換至含有 .tgz 檔案的目錄中，解壓縮內容：

       tar -xvzf ibm-java2-javacomm-50-linux-<arch>.tgz

   Java Communications API 會解壓縮到現有 IBMJava2-50 目錄中的子目錄。

## Java Communications API 檔案的位置

安裝的 Java Communications API 檔案如下所示：

- jre/lib/ext/comm.jar
- jre/bin/libibmcomm.so
- jre/lib/javax.comm.properties

如果安裝到預設目錄，則 comm.jar 檔案位於 /opt/ibm/java2-i386-50/jre/lib/ext。

如果將套件安裝到另一個目錄，檔案會放在相同的目錄結構中，但 /opt/ibm/java2-i386-50/ 變成 Java Communications API 的安裝目錄。

## 配置 Java Communications API

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

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

### 變更序列埠和並列埠的存取模式

安裝 Java Communications API 之後，您必須變更序列埠和並列埠的存取模式，讓使用者可以存取這些裝置。您必須給予使用者讀寫權限來存取所需的裝置。以 root 身分登入，視情況使用下列指令：

        chmod 666 /dev/ttyS0    （亦稱為序列埠 COM1）
        chmod 666 /dev/lp0      （亦稱為並列埠 LPT1）
        chmod 666 /dev/ttyS1    （亦稱為序列埠 COM2）
        chmod 666 /dev/ttyS2    （亦稱為序列埠 COM3）
        chmod 666 /dev/ttyS3    （亦稱為序列埠 COM4）

這些指令提供讀寫存取權給系統上的每一個人。

另一種方法是建立許可權 660，再將特定使用者新增至裝置所在的群組。例如，在 SUSE 系統上，裝置位於 `uucp` 群組。因此，使用者可以新增至 `uucp` 群組來取得裝置的存取權。

視需要變更其他任何埠號的存取模式。

#### 在 javax.comm.properties 檔案中指定裝置

檔案 javax.comm.properties 可讓您指定可供 Java Communications API 使用的裝置的前置詞，以及是否為並列或序列裝置。埠號會循序地配置給所有裝置。比方說，如果您指定 `/dev/ttyS=PORT_SERIAL`，且裝置 `/dev/ttyS0` 和 `/dev/ttyS1` 存在，則會分別配置 COM1 和 COM2。

若要使用 USB 序列接頭，請在 javax.comm.properties 檔案中刪除 `/dev/ttyUSB=PORT_SERIAL` 這一行的註解符號。如果裝置 `/dev/ttyUSB0` 和 `/dev/ttyUSB1` 存在，且已定義 COM1 和 COM2，則 USB 序列裝置會分配到後面的循序埠號：COM3 和 COM4。

## 啟用 IBM ThinkPads 的序列埠

依預設，大部分 ThinkPads 在 BIOS 中會停用序列埠。目前，Linux 尚無法啟用這些埠（如果 BIOS 已停用這些埠，tpctl 套件無法啟用埠號）

若要在 BIOS 中啟用埠號，您必須使用 DOS 版的 ThinkPad Configuration 公用程式，可以從 IBM ThinkPad 下載網站取得此公用程式。若要使用 ThinkPad Configuration 公用程式，您需要 DOS 開機磁片。請注意，在 Windows 上，ThinkPad Configuration 公用程式可能已安裝在「ThinkPad 公用程式」中 （視您的安裝選項而定），您可以從 Windows 的命令提示字元中執行此公用程式。

對 Windows 提供的 ThinkPad Configuration 應用程式，提供啟用或停用序列埠和並列埠的選項，但這無法變更 BIOS 中的設定。所以，如果您在 Windows 中使用此應用程式，則可以使用埠號；但在 Linux 上，如果重新開機，則不會啟用埠號。

## Java Communications API 列印限制

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

## 解除安裝 Java Communications API

您用來解除安裝 Java Communications API 的程序，取決於您是安裝 Red Hat Package Manager (RPM) 可安裝套件或 Tape Archive (TAR) 壓縮套件。

### 解除安裝 Red Hat Package Manager (RPM) 可安裝套件

如果是安裝 RPM 可安裝套件，若要解除安裝 Java Communications API：

1. 在 Shell 提示上，鍵入：

           rpm -e ibm-java2-<arch>-javacomm-5.0-0.0

   或者，您也可以利用圖形式工具，例如 kpackage 或 yast2。

2. 如果 Java Communications API 的安裝目錄不含您需要的其他任何工具，請從 PATH 陳述式移除該目錄。

### 解除安裝 Tape Archive (TAR) 壓縮套件

如果您是安裝 TAR 壓縮套件，若要解除安裝 Java Communications API，請從安裝目錄中刪除下列檔案：

- jre/lib/ext/comm.jar
- jre/bin/libibmcomm.so
- jre/lib/javax.comm.properties

## Java Communications API 文件

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

# 部署 Java 應用程式

## （僅適用於 Linux IA 32 位元和 PPC32）使用 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/。

### 支援的瀏覽器

|對於 Linux PPC32，Mozilla 1.6 是支援的瀏覽器。

|若為 Linux IA32，請參閱表 3。

|表 3. Java Plug-in 在 Linux IA32 上支援的瀏覽器
|發行版 | |Netscape 預設版本 | |Netscape 支援版本 | |Mozilla 預設版本 | |Mozilla 支援版本
--- | --- | --- | --- | ---
|Red Hat Enterprise Linux 3.0 | |- | |7.x | |1.4.2 | |1.4.1、1.4.2、1.7.8、Firefox 1.0.x
|Red Hat Enterprise Linux 4.0 | |4.8 | |7.x | |1.7.3 | |1.4.1、1.4.2、1.7.8、Firefox 1.0.x
|SUSE Linux Enterprise Server 9.0 | |- | |7.x | |1.6 | |1.4.1、1.4.2、1.6、1.7.8、Firefox 1.0.x

|

### 安裝和配置 Java Plug-in

|隨 SDK 提供了多個版本的 Java 外掛程式。您應選擇適用於您瀏覽器的版本。最常見的有：

| |
libjavaplugin_oji.so
|
  最常見的外掛程式。它是以 Mozilla 的 開放式 JVM 介面 initiative 為基礎，並與大部分的 Mozilla 產品和衍生產品搭配使用，其中包括 Firefox。 |
|
libjavaplugin_ojigtk2.so
|
  與上述相同的外掛程式，但是是使用 GTK2 工具箱編譯。 |

|有一些在以下某些常見瀏覽器上安裝外掛程式的指示。

|您必須以符號方式鏈結外掛程式（而非複製它），讓它可以找出 JVM。

#### Mozilla

|只有 Mozilla 1.4 版及更新版受支援。

如果要將 Java 外掛程式提供給所有使用者：

1. 以 root 身分登入。
2. 切換至 Mozilla 的 Plug-ins 目錄（在某些 Linux 程式模組散布上可能不同）。

       cd /usr/local/mozilla/plugins/

3. |建立到 libjavaplugin_oji.so 的符號式鏈結。 |

       ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .

您必須以符號方式鏈結外掛程式（而非複製它），讓它可以找出 JVM。

| | |

#### Firefox

|

如果要將 Java 外掛程式提供給所有使用者：

|

|
1. 以 root 身分登入。
|
2. 切換至 Firefox 的 Plug-ins 目錄（在某些 Linux 程式模組散布上可能不同）。 |

       cd /usr/local/mozilla-firefox/plugins/

|
3. |建立到 libjavaplugin_oji.so 的符號式鏈結。 |

       ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .

   |

|您必須以符號方式鏈結外掛程式（而非複製它），讓它可以找出 JVM。

#### Netscape 7.1 及更新版

若要安裝和配置 Java Plug-in for Netscape，請建立從程式庫檔 /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so 至瀏覽器 Plug-ins 目錄 (/browser-install-path/plugins) 的符號式鏈結。

1. 以 root 身分登入。
2. 切換至 Netscape 的 Plug-ins 目錄（在某些 Linux 程式模組散布上可能不同）。

       cd /usr/local/netscape/plugins/

3. 將 javaplugin_oji.so 的符號式鏈結放入 Plug-in 目錄中。

       ln -s /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so .

您必須以符號方式鏈結外掛程式（而非複製它），讓它可以找出 JVM。

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

- Netscape 4：「檢視」功能表 -> 「字元集」
- Mozilla：「檢視」功能表 ->「字元編碼」

## （僅限 Linux IA 32 位元、PPC32 及 PPC64）使用 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

當您使用 .rpm 或 .tgz 套件安裝 Java 時，也會自動安裝 Java Web Start 5.0 版。

|如果您從 .tgz 套件解壓縮 Java，請執行 jre/lib/javaws/updateSettings.sh |Shell Script，更新系統上的 .mailcap 和 .mime.types 檔案。

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

1. 在網頁上選取 .jnlp 檔案的鏈結。
2. 在 shell提示下，鍵入 `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 Linux，才能執行您的 應用程式。SDK for Linux 軟體包含 Runtime Environment。然而，您不能 假設使用者一定已經安裝 SDK for Linux 軟體。

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

| | |

# 在 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 安全許可權。依預設，會建立具有使用者存取權的共用類別快取，除非使用了 groupAccess 指令行子選項。只有已向共用類別登錄的類別載入器可以將類別新增至共用類別快取。如果已安裝 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_" 與現行使用者名稱結合來建立快取名稱。
  |
  - groupAccess | |
    |
    - 設定對新快取的作業系統許可權，以容許對快取的群組存取權。預設值是只有使用者存取權。
  |
  - 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 並行執行，會使整體啟動時間縮短。

|

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

| |

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

| |

### 快取大小的限制

|

共用類別的快取是使用 System |V IPC 共用記憶體機制來配置。

|

理論上，最大快取記憶體大小為 2GB。您可以指定的快取記憶體大小受限於系統可用的實體及分頁空間量。

|

由於共用類別快取與 Java 資料堆之間會共用程序的虛擬位址空間，因此增加 Java 資料堆的大小上限，會縮減您可以建立的共用類別快取大小。

|

快取大小由 SHMMAX 設定來限制，此設定會限制可配置的共用記憶體數量。您可以查看 /proc/sys/kernel/shmmax 檔案來檢查這些設定。SHMMAX 通常設為 30MB。

| |

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

|

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

| |

### 作業系統限制

|

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

|

共用類別快取需要磁碟空間來儲存系統上存在之快取的識別資訊。這項資訊儲存在 /tmp/javasharedresources。如果刪除識別資訊目錄，VM 將無法識別系統上的共用類別，必須重建快取。請利用 `ipcs` 指令來檢視 VM 或應用程式使用的憶體區段。

|

執行 JVM 的使用者必須在相同的群組中，才能使用共用類別快取。存取共用類別快取的許可權由作業系統強制實施。如果不指定快取名稱，則使用者名稱會附加至預設名稱，因此，相同系統上的多位使用者依預設會建立自己的快取。

| |

### 使用 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 元件的下拉清單，則在選取項目之前，組合框的按鈕或可編輯欄位的值不會變更。此為這個版中想要達成的行為，確保鍵盤遍訪行為和滑鼠遍訪保持一致，提高存取性和實用性。

## （僅限 Linux IA 32 位元、PPC32 及 PPC64）Web Start 協助工具

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

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

# 已知限制

以下幾節說明 SDK 和 Runtime Environment for Linux 的已知限制。

## 適用於所有 Linux 平台的限制（除非另有指示）

- |您的視窗管理程式可能會置換部分的 Java 快速鍵。如果您需要使用被置換的 Java 快速鍵，請參閱您的作業系統手冊，並變更視窗管理程式快速鍵。 |

- |X Windows System 無法使用 255 以上的檔案描述子。由於 JVM 保留檔案描述子以開啟 jar 檔，因此 X 可能會耗盡檔案描述子。有一個解決方案是，您可以設定 JAVA_HIGH_ZIPFDS 環境變數來指示 JVM 對 jar 檔使用較高的檔案描述子。 |

  若要使用 JAVA_HIGH_ZIPFDS 環境變數，請將它設為一個介於 0 到 512 之間的值。然後 JVM 會使用最多 1024 的檔案描述子開啟第一個 jar 檔。比方說，如果您的程式可能載入 300 個 jar 檔：

  |`export JAVA_HIGH_ZIPFDS=300` | |

  則會使用檔案描述子 724 到 1023 載入前 300 個 jar 檔。在之後開啟的任何 jar 檔都會在正常範圍內開啟。

- 如果您正在執行 K Desktop Environment (KDE)，您可能無法使用具有雙位元組字集 (DBCS) 的系統剪貼簿在 Linux 應用程式與 Java 應用程式之間複製資訊。

- 在 RHEL3、SLES9 及較新發行版中，預設的執行緒作業程式庫為 NPTL，其將 Java 執行緒作為原始執行緒實作。在較舊發行版中，預設的執行緒作業程式庫為 LinuxThreads，其將執行緒作為新程序實作。如果 Java 執行緒數目超過允許的最大程序數，您的程式可能會當掉。

  由下列各項的最小值決定可用的最大執行緒數目：

  - /etc/security/limits.conf 中的使用者程序設定 (ulimit -u)
  - 定義於 /proc/sys/kernel/threads_max 中的限制
  - 定義於 libpthreads.so 的 PTHREAD_THREADS_MAX 限制（需要重新編譯 glibc 來變更）

  不過，在到達最大執行緒數目之前，可能會先用完虛擬儲存體。

- 如果您以 Ctrl-C 終止 Java 應用程式，有些程序會變的零散沒有組織。

- 在 Linux 中使用不同的視窗管理程式時，使用 ALT 鍵的按鍵事件結果會有所不同。它們和其他作業系統的結果也會不同。在 Enlightenment 視窗管理程式中，Alt+A 和 Shift+Alt+A 會產生不同的修飾元，Ctrl+Alt+A 完全不會產生按鍵事件。不過，使用 WindowMaker 視窗管理程式時，Ctrl+Alt+A 會產生一個按鍵事件。

- 在 Linux X Window System 中，按鍵對照設為：64 0xffe9 (Alt_L) 0xffe7 (Meta_L) 以及 113 0xffea (Alt_R) 0xffe8 (Meta_R)。您可以在 Shell 提示下鍵入下列指令來檢查：

      xmodmap -pk

  這就是為何 SDK 將 Meta + Alt 視為同時按下的理由。您可以在 Shell 提示中輸入下列指令來移除 Meta_x 映射，作為解決方案：

      xmodmap -e "keysym Alt_L = Alt_L" -e "keysym Alt_R = Alt_R"

  註:
  這個解決方案可能影響在相同顯示畫面執行的其他 X-Window 應用程式（如果這些應用程式使用已移除的 Meta 鍵的話）。

- 如果在很慢的機器上建立長度不尋常的 DSA 鍵值對，可能會花上很長的時間。這類延遲不應解釋成當機，因為如果時間充裕的話，該程序會完成。DSA 鍵的產生演算法已經過最佳化，因此可以比其他產品更快產生標準的鍵長度（例如：512、1024）。

- 原生程式無法建立 VM with JNI_VERSION_1_1(0x00010001) 介面。您無法呼叫 JNI_CreateJavaVM() 並傳遞一個 JNI_VERSION_1_1(0x00010001) 版本給它。下列是可以傳遞的版本：
  - JNI_VERSION_1_2(0x00010002)
  - JNI_VERSION_1_4(0x00010004)

  所建立的 VM 都是由出現的 Java 程式庫決定（亦即，1.2.2、1.3.x、1.4.x、5.x），而不是指傳遞之 JNI 介面版本所包含的 VM。

  介面版本不會影響 VM 行為中可供原始程式碼使用的函數以外的任何區域。

- 從 JNI 應用程式呼叫 JNI_CreateJavaVM() 可能造成分區段錯誤（信號 SIGSEGV)； 為了避免此錯誤，請指定選項 -lpthread 來重新建置 JNI 程式。

- 僅針對繁體中文使用者，使用零壹注音、倚天注音和嘸蝦米 IME 輸入繁體中文字元時，按 Enter、空白鍵、倒退鍵和 ESC 這些功能鍵時會出現非預期的結果。Enter 鍵會插入換行，ESC 鍵是用來取消預先編輯字串或候選視窗，空白鍵會插入空格。在按確定鍵之後候選視窗應該會消失，在使用零壹注音、倚天注音和嘸蝦米 IME 輸入繁體中文字元時，如果按倒退鍵的話，應該不會出現該視窗。

- 如果您執行太多並行執行緒，可能會收到警告訊息：`java.lang.OutOfMemoryError`。 這表示您機器的系統資源不足，並且因為下列原因而產生訊息：
  1. 無法建立新執行緒，原因是：
     - 所建立的處理程序數目超出使用者數限制（如果您的 Linux 安裝使用 LinuxThreads，而不是 NPTL）。
     - 系統資源不足，無法建立新執行緒。在此情況下，可能也會出現其他 Java 異常狀況，視您目前執行的應用程式而定。
  2. 核心記憶體不足或為片段。您可在 /var/log/messages 中看到具有被刪除之程序 ID 的對應的「記憶體不足」核心訊息。
  請嘗試調整系統以增加對應的系統資源。

- 在安裝期間，如果您已安裝由 Red Hat 分送之本產品的舊版本，Red Hat Package Manager (RPM) 會報告 IBM 套裝軟體比 Red Hat 分送之產品的任何版本都來得舊。會發生這種狀況的原因是，Red Hat 將「序號」加入 RPM 套件中，這會改寫套件中產品的版本化架構，而依預設，RPM 會拒絕比已安裝版本還要舊的套件。 rpm 指令的 --oldpackage 選項可讓您安裝此一新的 IBM 套裝軟體。

- 在某部 Linux 機器上執行 Java AWT/Swing 應用程式，並將顯示結果匯出至另一部機器上時，如果 X 從屬站機器上所載入的字型集與 X 伺服器機器上載入的字型集不同，可能無法正確顯示部份對話框。這個問題特別容易發生在中文語言環境的 SLES8，因為其伺服器版本的預設安裝是安裝 arphic 字型，但從屬站版本的預設安裝不是安裝這個字型。為避免發生此問題，請同時在兩部機器上安裝相同的字型。

- 如果您的系統語言環境使用 UTF-8 編碼，部份 SDK 工具可能擲出 sun.io.MalformedInputException。若要瞭解您的系統是否使用 UTF-8 編碼，請查驗語言環境特有環境變數，如 LANG 或 LC_ALL，查看它們是否以字尾 ".UTF-8" 作為結尾。 如果您收到這個 sun.io.MalformedInputException，請將不在 7 位元 ASCII 範圍 (0x00 - 0x7f) 內且不是以 Java Unicode 字元文字表示的字元變更為 Java Unicode 字元文字 （例如 '\u0080'）。解決此問題還有另外一個方法，就是從語言環境特有環境變數中移除 ".UTF-8" 字尾；比方說，如果您機器的預設語言環境是 "en_US.UTF-8"，請將 LANG 設為 "en_US"。
  註:
  部份 Red Hat 發行版（包括 Red Hat 9 和 RHEL3）的預設編碼方式為 UTF-8。

- 如果您在跨平台環境中使用 AMI 和 xcin （比方說，如果您嘗試在 32 位元與 64 位元的系統之間匯出顯示結果，或嘗試在大序排列法與小序 排列法的系統之間匯出顯示結果），可能會發生一些問題。如果您有這方面的問題，請連絡 Linux 經銷商。

- 在 Red Hat Enterprise Linux 3 上，除了中文 GB18030 語言環境的 GB2312 字元之外，可能無法於 AWT 文字元件中顯示任何中文字元。

- |在 IBM 的 JConsole 工具中，無法使用本端標籤，這個標籤可讓您連接至在相同系統上的其他「虛擬機器」。請改用 JConsole 中的遠端標籤來連接至您要監視的「虛擬機器」。當您啟動要監視的應用程式時，請設定下列的指令行選項： |
  |
  - -Dcom.sun.management.jmxremote.port=<value> 來指定管理代理程式應接聽的埠。
  |
  - -Dcom.sun.management.jmxremote.authenticate=false 來停用鑑別（除非您已建立使用者名稱檔案）。
  |
  - -Dcom.sun.management.jmxremote.ssl=false 來停用 SSL 加密。
  |

- |針對 Red Hat |Enterprise Linux 4 的中文、韓文及日文語言使用者，如果您使用的是 Internet/Intranet Input Method Framework (IIIMF)，請使用 Red Hat Enterprise |Linux 4 Update 2 或更新版內含的 IIIMF 套件。此外，請注意下列問題。如果您遇到這個問題，請與 Red Hat 連絡以取得指示，其網址在 http://www.redhat.com。 |
  |
  - 在 Linux zSeries 64 位元上，您可能會遇到 IIIMF 失敗或無法啟動。請參閱 Red Hat Bugzilla 號碼 RIT73533（日文使用者專用）。
  | |

- |針對 Red Hat Enterprise |Linux 4 的簡體中文語言使用者。在 RHEL4 中，zh_CN.GB18030 語言環境不受 xlib 支援。xterm 無法啟動「輸入方法」來輸入 GB18030 字元。請改用 zh_CN.UTF8 語言環境。如果您有使用 GB2312、GBK 或 GB18030 編碼的舊式程式或資料，而想要將它們移轉至 RHEL4，則您必須加以前置處理，方法為使用 iconv 來將它們轉換成 utf-8 編碼，以便程式可以執行，同時資料可以適當地在 zh_CN.UTF8 語言環境的 RHEL4 中顯示。 |

- |在具有 miniChinput（簡體中文 XIM 伺服器）的 RHEL 3 上，在 64 位元環境（如 AMD64 或 zSeries 64 位元平台）中您可能會遇到非預期的 Java 行為。請與 Red Hat 連絡以取得指示，其網址在 http://www.redhat.com。請參閱 Red Hat Bugzilla 號碼 RIT75701。 |

- |在具有 ami（韓文 XIM 伺服器）的 RHEL 3 上，在 64 位元環境（如 AMD64 或 zSeries 64 位元平台）中您可能會遇到非預期的 Java 行為。請與 Red Hat 連絡以取得指示，其網址在 http://www.redhat.com。請參閱 Red Hat Bugzilla 號碼 RIT73605 和 RIT75708。 |

- |在具有 xcin（繁體中文 XIM 伺服器）的 RHEL 4 上，在 64 位元環境（如 AMD64 或 zSeries 64 位元平台）中您可能會遇到非預期的 Java 行為，例如分區段錯誤。請與 Red Hat 連絡以取得指示，其網址在 http://www.redhat.com。請參閱 Red Hat Bugzilla 號碼 RIT78430。 |

- |如果是日文、中文及韓文語言使用者，則在 Web 瀏覽器中，您無法使用 XIM 將您自己的字元輸入到 Java 指令定義上的文字元件中。這項限制是由於 XEmbed 需要 X11 程式庫檔案的修正所導致。若要避免這種狀況，請指定 -Dsun.awt.noxembed=true 系統參數來停用 XEmbed。您可以利用控制台來設定這個選項： | |
  |
  1. 開啟「Java 外掛程式」控制台，然後移至 Java 標籤。
  |
  2. 按一下「Java 指令定義執行時期設定」中的檢視按鈕。
  |
  3. 在「Java 執行時期參數」中輸入 -Dsun.awt.noxembed=true，然後按確定。
  |
  4. 按一下套用
  |
  5. 啟動瀏覽器。
  | |

## Linux IA 32 位元限制

- 若為 Arabic 文字使用者，在搭配 Matrox 影像卡使用 Linux 且啟用加速功能的情況下，如果使用 drawString 來顯示大字型，可能會發生字元變形。此問題原因出在影像卡的驅動程式。建議的解決方案是停用裝置加速功能。

- 在 SLES 9 NPTL 中，並行埠驅動程式會導致 kernel 毀損並終止 Java 執行緒。JVM 在嘗試針對「記憶體回收」暫停執行緒時，會偵測這個毀損，然後在產生核心檔時毀損，並顯示訊息：「JVMLH030: 在嘗試暫停所有執行緒時，執行緒消失」。

  已針對這個問題提出了 SUSE Bugzilla 報告 47947。這個錯誤已在 SLES 9 Service Pack 1 中修正。

## Linux AMD64 限制

| |
- 關於 AMD64 SMP 系統上之 BIOS 設定的重要注意事項： | |

  節點記憶體交錯 BIOS 設定必須設為 `DISABLED`。否則，可能發生無法預期的結果，包括 Java 毀損及當掉。這項指示符合 AMD 的建議事項。

## Linux PPC 32 位元與 64 位元限制

- 如果您的 Java 程式碼使用 JNI 呼叫，且任何特定呼叫都有超出八個 float 或 double 參數，則您必須用 gcc-2.95.3 Free Software Foundation (FSF) 層次的 GNU C 編譯器 (GCC) 來編譯您的 C 程式碼。

- 如果您在執行 XFree86 第 3.x 版，您可能會收到 SIGSEGV 錯誤。如果要避免這個問題，建議您使用 XFree86 第 4.x 版。

- 如果日期是設成 1970 之前的日期，那麼在嘗試啟動 Java 時會發生異常錯誤。如果要解決這個問題，請以手動方式，將您的機器設為現行日期：

- JavaComm 套件無法支援在 SLES 9 GA 及 SP1 kernel 上進行並行埠作業。在 SP2 kernel 中已解決這個限制。SUSE Bugzilla 號碼為 50028。

- 由於在 64 位元 kernel 的 32 位元模式中未實作的 IOCTL 函數，JavaComm 無法支援在 SLES 9 及 RHEL 4 進行支援序列埠。這項限制已在 SLES 9 SP2（Bugzilla 號碼 49787）及 RHEL 4 update 1（Bugzilla 號碼 144904）中解決。

## Linux PPC 64 位元限制

- 預設的 gcc 跨平台編譯器（3.2-49 版）導致許多錯誤發生。若要產生共用程式庫 libFileStat.so，請執行 `/opt/cross/bin/powerpc64-linux-gcc -shared -o libFileStat.so -I<SDK_PATH>/include FileStat.c`，其中 `<SDK_PATH>` 是安裝的 SDK 目錄路徑。

## Linux zSeries 64 位元限制

下列限制適用於 Linux zSeries 64 位元的中國和台灣使用者：

- 中國和台灣的輸入方法伺服器 (xcin) 尚未通過 5.0 版的測試。

## Linux zSeries 32 位元與 64 位元限制

- 如果您在沒有音效卡的機器上使用音效，當 Java 嘗試播放聲音時，可能會出現記憶體不足的錯誤訊息。此訊息顯示在主控台，但它不影響 Java 應用程式。

- 雖然目前發行的 Linux Kernel 提供了「網際網路通信協定」第 6 版 (IP6) 的支援，當您使用它時，還是有可能發生問題。此一版次包含 Java 對 IP6 的支援，但還是建議您利用 Java 指令的 -Djava.net.preferIPv4Stack=true 選項關閉此支援。如果您安裝了完整支援 IP6 的 kernel，您就不需要這個選項。

- |如果您以使用高解析度設定的 X 伺服器使用 zSeries 31 位元或 64 位元 Java，則採用 Motif AWT 的 AWT Choice 元件中的字符可能會被裁剪掉。若要避免這種狀況，請降低解析度設定，或是使用 XAWT 取代 Motif AWT。 |

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

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

- 使用電子郵件：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、iSeries、pSeries 和 zSeries 是 International Business Machines Corporation 在美國及（或）其他國家或地區的商標或註冊商標。

Intel 是 Intel Corporation 在美國及（或）其他國家的商標。

Java 以及所有以 Java 為基礎的商標及標誌圖都是 Sun Microsystems, Inc. 在美國及（或）其他國家或地區的商標或註冊商標。

Linux 是 Linus Torvalds 在美國及（或）其他國家的商標。

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

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

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