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

# Benutzerhandbuch

# Copyrightvermerk

Anmerkung: Vor Verwendung dieser Informationen und des dazugehörigen Produkts sollten Sie die allgemeinen Informationen im Abschnitt Bemerkungen lesen.

Diese Ausgabe des Benutzerhandbuchs bezieht sich auf IBM 32-bit SDK and Runtime Environment for Windows, Java 2 Technology Edition, Version 5.0 und auf alle nachfolgenden Releases, Änderungen und Serviceaktualisierungen bis zur Herausgabe neuer Dateiversionen.

(c) Copyright Sun Microsystems, Inc. 1997, 2004, 901 San Antonio Rd., Palo Alto, CA 94303 USA. Alle Rechte vorbehalten.

(c) Copyright International Business Machines Corporation, 1999, 2005. Alle Rechte vorbehalten.

(c) Copyright IBM Deutschland GmbH 1999, 2004. Alle Rechte vorbehalten.

# Vorwort

In diesem Benutzerhandbuch erhalten Sie allgemeine Informationen zu IBM(R) 32-bit SDK and Runtime Environment for Windows(R), Java(TM) 2 Technology Edition, Version 5.0 sowie spezielle Informationen zu allen Unterschieden zwischen der IBM Implementierung und der Sun-Implementierung. Lesen Sie dieses Benutzerhandbuch zusammen mit der ausführlicheren Dokumentation auf der folgenden Website von Sun Microsystems: http://java.sun.com.

SDK und Runtime Environment werden unter folgenden Betriebssystemen unterstützt:

- Windows 2000
- Windows XP
- Windows Server 2003

Beachten Sie, dass IP Version 6 nur unter Windows XP und Windows Server 2003 unterstützt wird.

Das Handbuch Diagnostics Guide enthält weitere Informationen zu IBM Virtual Machine für Java.

Technische Änderungen, die in diesem Benutzerhandbuch zu Version 5.0 enthalten sind, mit Ausnahme von unwichtigen oder offensichtlichen Änderungen, wie beispielsweise die Aktualisierung von "1.4.2" in "5.0", sind rot dargestellt, wenn sie als HTML-Datei angezeigt oder als Farbkopie ausgedruckt werden. Außerdem wird durch vertikale Balken am linken Rand auf diese Änderungen hingewiesen.

Die Begriffe "Runtime Environment" und "Java Virtual Machine" sind in diesem Handbuch gleichbedeutend.

# Inhaltsverzeichnis

Copyrightvermerk
Vorwort
Übersicht
Versionskompatibilität
Ausführen eines Upgrades für SDK
Migrieren von weiteren IBM JVMs
Inhalt von SDK und Runtime Environment
Runtime Environment-Tools
SDK-Tools
Installieren und Konfigurieren von SDK und Runtime Environment
Vor der Installation
Überwachte (interaktive) Installation
Installieren der Pakete
Installieren von Runtime Environment als System-JVM
Nicht überwachte Installation
Aktivieren von IBM Accessibility Bridge
Inaktivieren der Unterstützung von Java Accessibility
Informationen für Benutzer europäischer Sprachversionen
Festlegen der Umgebungsvariablen PATH
Festlegen der Umgebungsvariablen CLASSPATH
Deinstallation
Verwenden von Runtime Environment
Optionen
Angeben von Java-Optionen und Systemmerkmalen
Standardoptionen
Vom Standard abweichende Optionen
Abrufen der IBM Build- und Versionsnummer
Globalisierung des Befehls 'java'
Automatisches Ausführen einer Java-Datei
Ausführen von Java-Anwendungen mit Technologien für behindertengerechte Bedienung
JIT-Compiler (Just-In-Time)
Inaktivieren des JIT-Compilers
Aktivieren des JIT-Compilers
Prüfen, ob der JIT-Compiler aktiviert ist
Angeben der Garbage-Collection-Richtlinie
Optionen der Garbage-Collection
Pausezeit
Verringerung der Pausezeit
Umgebungen mit sehr vollen Freispeichern
Signalverarbeitung durch JVM
Von JVM verwendete Signale
Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek
Umwandeln von XML-Dokumenten
Verwenden einer älteren Version von Xerces oder Xalan
Verwenden von SDK zur Entwicklung von Java-Anwendungen
Debugging in Java-Anwendungen
Java-Debugger (JDB)
Ermitteln, ob eine Anwendung auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt wird
Schreiben von JNI-Anwendungen
Arbeiten mit Applets
Ausführen von Applets mit Applet Viewer
Debugging von Applets mit Applet Viewer
| |
Konfigurieren einer Speicherzuordnung von großen Seiten
CORBA-Unterstützung
Unterstützung für GIOP 1.2
Unterstützung für portierbare Abfangprozesse
Unterstützung für den Interoperable Naming Service
Systemmerkmale für die ORB-Tracefunktion
Systemmerkmale zur Optimierung des ORB
Java 2-Sicherheitsberechtigungen für den ORB
ORB-Implementierungsklassen
RMI-IIOP
Implementieren des Steuerroutinenpools für RMI-Verbindungen
Erweiterte BiDirectional-Unterstützung
Funktionale Erweiterungen für BigDecimal
Unterstützung des Euro-Symbols
Verwenden der Java Communications API (JavaComm)
Installieren der Java Communications API
Konfigurieren der Java Communications API
Einschränkung beim Drucken mit der Java Communications API
Deinstallieren der Java Communications API
Dokumentation zur Java Communications API
Implementieren von Java-Anwendungen
Verwenden des Java-Plug-ins
Unterstützte Browser
Allgemeine Dokumentobjektmodellunterstützung (Document Object Model, DOM)
Verwenden von DBCS-Parametern
Verwenden von Java Web Start
Ausführen von Java Web Start
Ausliefern von Java-Anwendungen
| |
Gemeinsame Nutzung von Klassendaten auf verschiedenen JVMs
| |
Übersicht über die gemeinsame Nutzung von Klassen
| |
Cache-Inhalte
| |
Dynamisches Aktualisieren des Caches
| |
Aktivieren der gemeinsamen Nutzung von Klassen
| |
Cache-Sicherheit
| |
Lebensdauer des Caches
| |
Cache-Dienstprogramme
| |
Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen
| |
Erstellen, Belegen, Überwachen und Löschen eines Caches
| |
Leistung und Speicherbelegung
| |
Einschränkungen und besondere Aspekte bei der gemeinsamen Nutzung von Klassen
| |
Grenzwerte für die Cachegröße
| |
Änderungen bei Laufzeitbytecodes
| |
Betriebssystemeinschränkungen
| |
Verwenden von SharedClassPermission
| |
Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen
Service und Unterstützung für unabhängige Softwareanbieter
Eingabehilfen
iKeyman-Eingabehilfen
Verschieben des Eingabefokus von JComboBox-Komponenten in Swing per Tastatur
Web Start-Eingabehilfen
Allgemeine Hinweise zu Sicherheitsfunktionen
Bekannte Einschränkungen
Kommentare zu diesem Handbuch
Bemerkungen
Marken

# Übersicht

Bei IBM SDK handelt es sich um eine Entwicklungsumgebung zum Schreiben und Ausführen von Applets und Anwendungen, die der IBM Java 5.0 Core-API (Application Programming Interface - Anwendungsprogrammierschnittstelle) entsprechen.

SDK umfasst Runtime Environment for Windows. Mit dieser Komponente können Sie nur Java-Anwendungen ausführen. Wenn Sie SDK installiert haben, ist auch Runtime Environment enthalten.

Runtime Environment enthält Java Virtual Machine sowie unterstützende Dateien, wie z. B. Klassendateien. Runtime Environment enthält nur eine Untergruppe der Klassen, die in SDK enthalten sind. Mit dieser Komponente können Sie ein Java-Programm in der Laufzeit verwenden, jedoch keine Java-Programme kompilieren. Runtime Environment for Windows enthält kein Entwicklungstool, wie z. B. appletviewer.exe oder den Java-Compiler (javac.exe), bzw. keine Klassen, die nur für Entwicklungssysteme konzipiert sind.

Außerdem wird das Paket mit der Java Communications API zur Verwendung mit Runtime Environment for Windows bereitgestellt. Informationen hierzu finden Sie unter Verwenden der Java Communications API (JavaComm).

## Versionskompatibilität

Normalerweise müssten alle Applets oder Anwendungen, die mit einer Vorversion von SDK ausgeführt wurden, zusammen mit IBM 32-bit SDK for Windows, v5.0 ordnungsgemäß ausgeführt werden. Es ist nicht gewährleistet, dass Klassen, die auf der Grundlage dieses Releases kompiliert wurden, zusammen mit früheren Releases eingesetzt werden können.

|IBM 32-bit SDK for Windows V5.0 basiert auf |Microsoft Visual Studio .NET 2003.

Die Sun-Dokumentation zur Kompatibilität finden Sie auf der Sun-Website unter http://java.sun.com.

## Ausführen eines Upgrades für SDK

Wenn Sie ein Upgrade von einem früheren SDK-Release ausführen, sichern Sie alle Konfigurations- und Sicherheitsrichtliniendateien, bevor Sie mit dem Ausführen des Upgrades fortfahren.

Nach dem Ausführen des Upgrades müssen Sie diese Dateien eventuell wiederherstellen oder neu konfigurieren, da sie beim Upgradeprozess möglicherweise überschrieben wurden. Prüfen Sie die Syntax der neuen Dateien, bevor Sie die ursprünglichen Dateien wiederherstellen, da sich das Format oder die Optionen für die Dateien geändert haben können.

## Migrieren von weiteren IBM JVMs

In Version 5.0 enthält IBM Runtime Environment for Windows neue Versionen von IBM Java Virtual Machine und des JIT-Compilers (Just-In-Time). Wenn Sie von einer älteren IBM Runtime Environment-Version migrieren, beachten Sie Folgendes:

- Die JVM-DLL-Datei jvm.dll befindet sich im Verzeichnis jre\bin\j9vm. Dies ist nicht der Fall, wenn die Migration z. B. über Runtime Environment for Windows für Version 1.4.2 ausgeführt wird. In diesem Fall lautet das Verzeichnis jre\bin\classic. Für native Anwendungen, die die JNI-Aufrufschnittstelle verwenden, muss der bzw. den zugehörigen Umgebungsvariablen möglicherweise der neue Verzeichnispfad hinzugefügt werden, damit die JVM-DLL-Datei gefunden wird.
- |Die JVMMI (JVM Monitoring Interface) ist nicht mehr verfügbar. |Sie müssen Anwendungen, die diese API verwenden, neu schreiben. Es wird empfohlen, stattdessen die JVMTI (JVM Tool Interface) zu verwenden. Die JVMTI entspricht funktional nicht der JVMMI. Weitere Informationen zur JVMTI finden Sie unter http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/ und im Handbuch Diagnostics Guide.
- |Die neue Implementierung von JNI entspricht der JNI-Spezifikation, unterscheidet sich jedoch von der alten Implementierung. Sie gibt Kopien der Objekte zurück, anstatt die ursprünglichen Objekte im Speicher zu belassen. Dieser Unterschied kann zu Fehlern im JNI-Anwendungscode führen. Informationen zum Debugging von JNI-Code finden Sie unter -Xcheck:jni im Abschnitt Vom Standard abweichende Optionen.
- |Format und Inhalt von ausführlichen Garbage-Collector-Protokollen, die mit Hilfe von -verbose:gc empfangen wurden, wurden geändert. Die Daten weisen jetzt das XML-Format auf. Der Dateninhalt zeigt die Änderungen der Implementierung der Garbage-Collection in JVM an. Die meisten statistischen Ausgabedaten wurden geändert. |Sie müssen alle Programme ändern, die die ausführliche GC-Ausgabe verarbeiten, damit diese Programme mit dem neuen Format und den neuen Daten funktionieren. Im Handbuch Diagnostics Guide finden Sie ein Beispiel der neuen ausführlichen GC-Daten.
- Frühere IBM JRE-Versionen wurden zusammen mit der Datei rt.jar geliefert, die sich im Verzeichnis jre/lib befindet. Ab Java Version 1.4 wurde diese Datei durch mehrere JAR-Dateien ersetzt, die sich im Verzeichnis jre/lib befinden.
- |Weitere Informationen zur Kompatibilität und zu veralteten APIs in Bezug auf Sun-Java-Releases finden Sie in den Dokumenten Sun's Java 5 Compatibility Documentation und Sun's Java 5 Depreciated API List.

# Inhalt von SDK und Runtime Environment

SDK enthält mehrere Entwicklungstools und Java Runtime Environment (JRE). Dieser Abschnitt enthält Erläuterungen zum Inhalt der SDK-Tools und von Runtime Environment.

Anwendungen, die vollständig in Java geschrieben sind, sollten keine Abhängigkeiten von der IBM SDK-Verzeichnisstruktur (oder Dateien in diesen Verzeichnissen) aufweisen. Abhängigkeiten von der SDK-Verzeichnisstruktur (oder den Dateien in diesen Verzeichnissen) können zu Fehlern bei der Portierbarkeit von Anwendungen führen. JNI-Anwendungen (Java Native Interface) weisen geringfügige Abhängigkeiten auf.

## Runtime Environment-Tools

- Wichtige Klassen -- Dies sind die kompilierten Klassendateien für die Plattform. Sie müssen komprimiert bleiben, damit der Compiler und der Interpreter auf sie zugreifen können. Ändern Sie diese Klassen nicht, sondern erstellen Sie stattdessen Unterklassen, und überschreiben Sie diese, falls erforderlich.
- JRE-Tools -- Die folgenden Tools sind Teil von Runtime Environment. Sofern nichts anderes angegeben ist, befinden sie sich im Verzeichnis jre\bin.
  - java.exe (Java-Interpreter)
    - Führt Java-Klassen aus. Der Java-Interpreter führt Programme aus, die in der Programmiersprache Java geschrieben sind.
  - javaw.exe (Java-Interpreter)
    - Führt Java-Klassen genauso aus wie der Befehl java, verwendet jedoch kein Konsolfenster.
  - keytool.exe (Tool für das Schlüssel- und Zertifikatmanagement)
    - Verwaltet einen Schlüsselspeicher (Datenbank) mit privaten Schlüsseln und den ihnen zugeordneten X.509-Zertifikatketten, die die entsprechenden öffentlichen Schlüssel authentifizieren.
  - policytool.exe (Tool für die Erstellung und das Management von Richtliniendateien)
    - Erstellt und ändert die externen Richtlinienkonfigurationsdateien, die die Java-Sicherheitsrichtlinie Ihrer Installation definieren.
  - rmid.exe (Systemdämon für die RMI-Aktivierung)
    - Startet den Aktivierungssystemdämon, so dass Objekte in JVM (Java Virtual Machine) registriert und aktiviert werden können.
  - tnameserv.exe (CORBA Naming Service (CORBA - Common Object Request Broker Architecture))
    - Startet den CORBA Transient Naming Service.
  - rmiregistry.exe (Java-Registrierungsdatenbank für ferne Objekte)
    - Erstellt und startet eine Registrierungsdatenbank für ferne Objekte an dem angegebenen Port des aktuellen Hosts.
  - ikeyman.exe (iKeyman-GUI-Dienstprogramm)
    - Ermöglicht das Verwalten von Schlüsseln, Zertifikaten und Zertifikatsanforderungen. Weitere Informationen finden Sie im zugehörigen Handbuch Security Guide und unter http://www.ibm.com/developerworks/java/jdk/security. SDK enthält auch eine Befehlszeilenversion dieses Dienstprogramms. Weitere Informationen hierzu finden Sie im Abschnitt iKeyman-Eingabehilfen.
  - jextract.exe (Extrahierungsprogramm für Speicherauszüge)
    - Konvertiert einen vom System erstellten Speicherauszug in ein einheitliches Format, das von jdmpview verwendet werden kann. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.
  - javaws.exe (Java Web Start)
    - Ermöglicht die Implementierung und automatische Verwaltung von Java-Anwendungen.

## SDK-Tools

- Die folgenden Tools sind Teil von SDK und befinden sich im Verzeichnis C:\Programme\IBM\Java50\bin :
  - javac.exe (Java-Compiler)
    - Kompiliert Programme, die in der Programmiersprache Java in Bytecodes (kompilierter Java-Code) geschrieben werden.
  - appletviewer.exe (Java Applet Viewer)
    - Testet und führt Applets außerhalb eines Web-Browsers aus.
  - jdb.exe (Java-Debugger)
    - Hilft beim Debugging Ihres Java-Programms.
  - javap.exe (Disassembler für Klassendateien)
    - Zerlegt kompilierte Dateien und kann eine Darstellung der Bytecodes drucken.
  - javadoc.exe (Java-Dokumentationsgenerator)
    - Generiert HTML-Seiten der API-Dokumentation über Java-Quellendateien.
  - javah.exe (C-Header- und Stubdateigenerator)
    - Ermöglicht die Zuordnung nativer Methoden zu Code, der in der Programmiersprache Java geschrieben wurde.
  - jar.exe (Java-Archivierungstool)
    - Kombiniert mehrere Dateien in einer einzelnen JAR-Datei (Java Archive).
  - jarsigner.exe (Tool zur JAR-Signierung und -Prüfung)
    - Generiert Signaturen für JAR-Dateien und prüft die Signaturen der signierten JAR-Dateien.
  - jconsole.exe (JConsole - experimentelles Überwachungs- und Verwaltungstool)
    - Experimentelles (nicht unterstütztes) JMX-kompatibles grafisches Tool zur Überwachung von lokalen und fernen JVMs.
  - native2ascii.exe (Native-zu-ASCII-Converter)
    - Konvertiert eine native Codierungsdatei in eine ASCII-Datei, die Zeichen enthält, die in Latin-1 und/oder Unicode codiert sind.
  - rmic.exe (Java-RMI-Stub-Converter (RMI - Remote Method Invocation))
    - Generiert Stubs, Entwürfe und Ties für ferne Objekte. Umfasst Unterstützung für RMI-IIOP (RMI over Internet Inter-ORB Protocol).
  - idlj.exe (IDL für Java-Compiler)
    - Generiert Java-Bindungen über eine festgelegte IDL-Datei.
  - serialver.exe (Befehl für serialisierte Version)
    - Wandelt die serialVersionUID für mindestens eine Klasse in ein Format um, das in eine Klasse kopiert werden kann, die sich in einer zukünftigen Version ändert.
  - extcheck.exe (Extcheck-Dienstprogramm)
    - Stellt Versionskonflikte zwischen einer JAR-Zieldatei und neu installierten JAR-Erweiterungsdateien fest.
  - jdmpview.exe (plattformunabhängiges Formatierprogramm für Speicherauszüge)
    - Ein Tool, mit dem Sie Speicherauszüge analysieren können. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.
  - htmlconverter.exe (Java Plug-in HTML Converter)
    - Konvertiert eine HTML-Seite, in der Applets enthalten sind, in ein Format, das das Java-Plug-in verwenden kann.
- Include-Dateien
  - C-Header für JNI-Programme.
- Demos
  - Das Verzeichnis 'demo' enthält mehrere Unterverzeichnisse, in denen Musterquellcode, Demos, Anwendungen und Applets enthalten sind, die Sie verwenden können.
- Copyright
  - Copyrightvermerk für die SDK for Windows-Software.
- Lizenz
  - Die Lizenzdatei C:\Programme\IBM\Java50\license enthält die Lizenzvereinbarung für die SDK for Windows-Software. Öffnen Sie diese Datei in einem Web-Browser, um die Lizenzvereinbarung anzuzeigen oder zu drucken.

Anmerkung: SDK for Windows enthält lediglich die Benutzerhandbücher, die Javadoc-Komponente und die zugehörige Lizenz, die zugehörigen Copyrightdateien sowie das Demoverzeichnis. Sie können die Sun-Softwaredokumentation über die Sun-Website aufrufen oder das Dokumentationspaket zur Sun-Software über die Sun-Website herunterladen: http://java.sun.com.

# Installieren und Konfigurieren von SDK und Runtime Environment

## Vor der Installation

Laden Sie zum Installieren des SDK- oder Runtime Environment-Pakets das entsprechende Installationspaket herunter. Stellen Sie sicher, dass Sie alle Pakete in dasselbe Verzeichnis herunterladen. Die Pakete und die zugehörigen Dateinamen sind im Abschnitt Überwachte (interaktive) Installation aufgeführt. Sie dürfen die Dateinamen der Pakete nicht ändern.

Stellen Sie vor dem Start der Installation sicher, dass im Verzeichnis C:\WINDOWS\TEMP genügend Speicherplatz für die Installation zur Verfügung steht. Während der Installation wird im Verzeichnis TEMP der folgende temporäre Speicherplatz benötigt:

- Installierbares SDK-Paket: 130 MB
- Installierbares Runtime Environment-Paket: 85 MB

Wenn nicht genügend temporärer Speicherplatz zur Verfügung steht, zeigt das Installationsprogramm einen Fehler an, und die Installation wird beendet. Wenn Ihr System über genügend temporären Speicherplatz verfügt, diese Nachricht jedoch weiterhin angezeigt wird, prüfen Sie, ob die Pakete, die Sie installieren wollen, vollständig heruntergeladen wurden. Dies ist möglich, indem Sie die Dateigröße des Pakets mit der Dateigröße vergleichen, die auf den Webseiten angezeigt wird, über die Sie das Paket heruntergeladen haben.

## Überwachte (interaktive) Installation

Sie können die folgenden Pakete installieren:

- Installierbares SDK-Paket: ibm-java2-sdk-50-win-i386.exe
- Installierbares Runtime Environment-Paket: ibm-java2-jre-50-win-i386.exe
- Installierbares Runtime Environment-Paket (nur IBM Hardware): ibm-java2-jre-50-ibmpc-win-i386.exe

Andere Pakete werden als ZIP-Dateien zur Verfügung gestellt:

- Runtime Environment-Paket: ibm-java2-jre-50-win-i386.zip
- SDK-Paket: ibm-java2-sdk-50-win-i386.zip
- Paket mit Java Communications API (Application Programming Interface) für Windows: ibm-java2-javacomm-50-win-i386.zip. Installationsanweisungen finden Sie im Abschnitt Installieren der Java Communications API.
- Dokumentationspaket: ibm-java2-docs-50-win-i386.zip
- Demopaket: ibm-java2-demos-50-win-i386.zip

### Installieren der Pakete

1. Starten Sie ibm-java2-sdk-50-win-i386.exe (für SDK) oder ibm-java2-jre-50-win-i386.exe (nur für Runtime Environment).
2. Befolgen Sie die Anweisungen im Installationsassistenten.

Runtime Environment wird standardmäßig im Verzeichnis C:\Programme\IBM\Java50\jre installiert.

Wenn Sie das installierbare SDK-Paket heruntergeladen haben, können Sie auswählen, welche Komponente installiert werden soll:

- SDK-Entwicklungstools (z. B. der Java-Compiler)
- Runtime Environment
- Der Quellcode für die Sun-Klassenbibliotheken, der von mehreren Tools zum Debugging von Anwendungen verwendet wird.

Sie können die Komponenten einzeln oder kombiniert installieren.

Im Installationsassistenten werden folgende Optionen angezeigt:

- Standard - Mit dieser Option werden alle drei Komponenten installiert.
- Minimal - Mit dieser Option wird nur Runtime Environment installiert.
- Benutzerdefiniert - Mit dieser Option können Sie auswählen, welche Komponente installiert werden soll.

### Installieren von Runtime Environment als System-JVM

Bei der Installation von Runtime Environment (entweder als Teil des installierbaren SDK-Pakets oder aus dem installierbaren Runtime Environment-Paket) werden Sie gefragt, ob Sie Runtime Environment als System-JVM (Java Virtual Machine) installieren wollen. Soll die Installation als System-JVM erfolgen, kopiert das Installationsprogramm die Dateien java.exe und javaw.exe in das Windows-Systemverzeichnis. Wenn eine Version von java.exe oder javaw.exe bereits im Windows-Systemverzeichnis vorhanden ist, werden Sie gefragt, ob die vorhandene Version mit der aktuellen Version überschrieben werden soll. Beim Installieren dieser Dateien in dem Windows-Systemverzeichnis wird diese Version von Runtime Environment zur Standard-JVM des Systems. Außerdem wird der Registrierungsschlüssel "Current Version" dieser Installation entsprechend festgelegt.

Anmerkung:
Wenn Sie Runtime Environment als System-JVM installieren, werden nur die Dateien java.exe und javaw.exe in das Windows-Systemverzeichnis kopiert. Es werden keine weiteren ausführbaren Dateien (z. B. javac.exe oder appletviewer.exe) kopiert.

## Nicht überwachte Installation

Wenn Sie eine nicht überwachte Installation erstellen wollen, müssen Sie zunächst eine nicht überwachte Installation vollständig ausführen und eine Antwortdatei (setup.iss) erstellen, in der die Optionen aufgeführt sind, die Sie während der Installation ausgewählt haben. Die Antwortdatei muss für die Computer, auf denen sie verwendet werden soll, ordnungsgemäß erstellt werden. Erstellen Sie gegebenenfalls mehrere Antwortdateien, die zum Installieren der Pakete auf Computern mit unterschiedlichen Konfigurationen verwendet werden können.

Wenn Sie während der Installation eine Antwortdatei erstellen wollen, geben Sie Folgendes an einer Eingabeaufforderung ein:

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

oder

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

Je nach dem verwendeten Windows-Produkt wird eine Antwortdatei (setup.iss) entweder im Verzeichnis C:\Windows oder C:\Winnt erstellt. Dabei ist C: das Bootlaufwerk.

Während einer interaktiven Installation wird möglicherweise folgende Nachricht angezeigt:

       Eine andere Version von Java Runtime Environment
       ist momentan als System-JVM installiert. Wollen
       Sie die vorige System-JVM mit dieser JRE-Version
       überschreiben?

Wenn diese Nachricht angezeigt wird, wählen Sie Nein aus, und beenden Sie die Installation. Wechseln Sie in das Windows-Systemverzeichnis, und löschen Sie die beiden folgenden Dateien:

- java.exe
- javaw.exe

Nachdem Sie die Dateien gelöscht haben, starten Sie die interaktive Installation erneut mit dem oben aufgeführten Befehl.

Kopieren Sie auf dem System, auf dem Sie die nicht überwachte Installation ausführen wollen, die Antwortdatei setup.iss in das Verzeichnis C:\Windows. Nachdem Sie die Datei kopiert haben, geben Sie Folgendes an einer Eingabeaufforderung ein:

    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

Anmerkungen:

1. Nach `/f1` oder `/f2` dürfen keine Leerzeichen stehen.
2. Die Option `/f1` gibt den Namen und die Position der Antwortdatei an. Die Option `/f2` gibt den Namen und die Position der Protokolldatei an.

Wenn die Installation erfolgreich durchgeführt wurde, enthält die Protokolldatei die Zeichenfolge `ResultCode=0`.

## Aktivieren von IBM Accessibility Bridge

IBM Accessibility Bridge wird installiert, ist jedoch standardmäßig inaktiviert. Wenn Sie IBM Accessibility Bridge aktivieren wollen, löschen Sie das Nummernzeichen, das sich am Anfang der folgenden Zeile in der Datei Accessibility.properties im Verzeichnis jre/lib befindet:

    #assistive_technologies=JawBridge

Auf der folgenden Website finden Sie weitere Informationen zu den Accessibility-Dienstprogrammen:

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

## Inaktivieren der Unterstützung von Java Accessibility

Sie können die Unterstützung von Java Accessibility inaktivieren, um die JVM-Ladeleistung der Java-Anwendungen zu verbessern, die keine Unterstützung der Java-Technologie für behindertengerechte Bedienung insbesondere über Netzverbindungen bieten.

Wenn Sie die Unterstützung von Java Accessibility inaktivieren wollen, setzen Sie den Wert für die Umgebungsvariable JAVA_ASSISTIVE auf OFF. Technologie für behindertengerechte Bedienung, wie z. B. JawBridge, ist nicht verfügbar, wenn für diese Umgebungsvariable OFF angegeben ist, obwohl die Technologie in der Datei Accessibility.properties aktiviert ist.

## Informationen für Benutzer europäischer Sprachversionen

Unter Windows weist ein Prozess zwei Codepages auf: die ANSI- (oder Windows-)Codepage und die OEM- (oder DOS-)Codepage.

Das Befehlsfenster verwendet normalerweise die OEM-Codepage. In der Java-Konsolausgabe wird die Codepage des Befehlsfensters verwendet, über das Java gestartet wird. Für den Befehl javaw wird jedoch immer die ANSI-Codepage verwendet. Sie können die Codepage, die für die Konsolausgabe verwendet werden soll, mit der Option -Dconsole.encoding im Befehl java angeben. Beispielsweise wird mit -Dconsole.encoding=Cp1252 angegeben, dass für alle Konsolausgaben die Codepage Windows ANSI Latin1 (1252) verwendet werden soll.

## Festlegen der Umgebungsvariablen PATH

Beachten Sie, dass alle vorhandenen ausführbaren Java-Dateien in dem von Ihnen verwendeten Pfad überschrieben werden, wenn Sie die Umgebungsvariable PATH wie unten beschrieben ändern.

Nach der Installation von SDK können Sie ein Tool ausführen, indem Sie an einer Eingabeaufforderung den Namen des Tools zusammen mit einem Dateinamen als Argument eingeben.

Geben Sie den Pfad für ein Tool immer so an, dass der Pfad vor dem Toolnamen steht. Wenn beispielsweise SDK for Windows im Verzeichnis C:\Programme\IBM\Java50\bin installiert ist, können Sie eine Datei mit dem Namen MeineDatei.java kompilieren, indem Sie Folgendes an einer Eingabeaufforderung eingeben:

      "C:\Programme\IBM\Java50\bin\javac" MeineDatei.java

Gehen Sie wie folgt vor, um nicht jedesmal den vollständigen Pfad eingeben zu müssen:

1. Fügen Sie der Umgebungsvariablen PATH die folgenden Verzeichnisse hinzu:
   - C:\Programme\IBM\Java50\bin (nur SDK)
   - C:\Programme\IBM\Java50\jre\bin (SDK und Runtime Environment)

   Wenn SDK oder Runtime Environment in einem anderen Verzeichnis installiert sind, ersetzen Sie C:\Programme\IBM\Java50\ durch das Verzeichnis, in dem SDK oder Runtime Environment installiert sind.

2. Kompilieren Sie die Datei mit dem Tool javac. Geben Sie beispielsweise zum Kompilieren der Datei MeineDatei.java Folgendes an einer Eingabeaufforderung ein:

         javac MeineDatei.java

   Mit der Umgebungsvariablen PATH können unter Windows ausführbare Dateien, wie z. B. javac, java und javadoc, in allen aktuellen Verzeichnissen gesucht werden. Geben Sie zum Anzeigen des aktuellen Werts der Umgebungsvariablen PATH Folgendes an einer Eingabeaufforderung ein:

         echo %PATH%

## Festlegen der Umgebungsvariablen CLASSPATH

Die Umgebungsvariable CLASSPATH teilt den SDK-Tools (z. B. java, javac und javadoc) die Speicherposition der Java-Klassenbibliotheken mit.

Sie müssen die Umgebungsvariable CLASSPATH nur festlegen, wenn eine der folgenden Aussagen zutrifft:

- Sie benötigen eine andere Bibliothek oder Klassendatei (z. B. eine, die Sie entwickeln), und diese befindet sich nicht im aktuellen Verzeichnis.
- Sie ändern die Speicherposition der Verzeichnisse bin und lib, sodass sie sich nicht mehr im selben übergeordneten Verzeichnis befinden.
- Sie wollen Anwendungen entwickeln oder ausführen, die unterschiedliche Laufzeitumgebungen auf demselben System verwenden.

Geben Sie zum Anzeigen des aktuellen Werts der Umgebungsvariablen CLASSPATH Folgendes an einer Eingabeaufforderung ein:

      echo %CLASSPATH%

Wenn Sie Anwendungen entwickeln und ausführen wollen, die unterschiedliche Laufzeitumgebungen verwenden, wie z. B. andere Versionen, die separat installiert wurden, müssen Sie CLASSPATH (und PATH) für jede Anwendung explizit festlegen. Wenn Sie mehrere Anwendungen gleichzeitig ausführen und unterschiedliche Laufzeitumgebungen verwenden wollen, muss jede Anwendung in einem separaten Befehlsfenster ausgeführt werden.

Wenn Sie nur jeweils eine Version von Java ausführen wollen, können Sie mit Hilfe eines Batch-Scripts zwischen den verschiedenen Laufzeitumgebungen umschalten.

## Deinstallation

Gehen Sie wie folgt vor, um SDK zu deinstallieren, abhängig davon, ob Sie eine überwachte oder nicht überwachte Installation durchgeführt haben:

1. Klicken Sie auf dem Windows-Desktop das Symbol Arbeitsplatz doppelt an.
2. Klicken Sie Systemsteuerung doppelt an.
3. Klicken Sie Software doppelt an.
4. Klicken Sie IBM 32-bit SDK for Java 2 V5.0 in der Liste an, und klicken Sie anschließend Ändern/Entfernen an.
5. Klicken Sie OK an.

Diese Prozedur löscht alle Pakete vom System, die mit dem Installationsprogramm installiert wurden. Das Java Communications API-Paket (siehe Java Communications API) oder zusätzliche Dateien, die aus den Zip-Paketen extrahiert wurden, werden nicht gelöscht.

Anmerkung:
Möglicherweise werden Warnungen angezeigt, die darauf hinweisen, dass nicht alle Dateien und/oder Einträge in der Registrierungsdatenbank gelöscht wurden. Diese Warnungen werden ausgegeben, da Windows davon ausgeht, dass bestimmte Dateien weiterhin verwendet werden. Diese Dateien und/oder Einträge in der Registrierungsdatenbank werden beim nächsten Systemstart gelöscht.

Wenn auf dem System mehrere Installationen zwischen IBM 32-bit SDK for Windows, v5.0 und V1.3.1 (oder ältere Versionen) vorhanden sind und Sie die älteren Version deinstallieren, während V5.0 weiterhin auf dem System vorhanden ist, löscht das Deinstallationsprogramm zu V1.3.1 die nachfolgend aufgeführten Registrierungsschlüssel und alle Unterschlüssel, die für V5.0 erforderlich sind. Dadurch wird die Installation von V5.0 beschädigt:

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

Installieren Sie daher V5.0 erst dann erneut, wenn Sie Version 1.3.1 deinstalliert haben. Diese Einschränkung in Bezug auf das Deinstallationsprogramm wurde für V1.4.0 und alle nachfolgenden Versionen behoben.

# Verwenden von Runtime Environment

Mit dem Tool java wird durch Starten von Java Runtime Environment und Laden einer angegebenen Klasse eine Java-Anwendung gestartet.

JVM sucht in den drei folgenden Positionsgruppen nach der ursprünglichen Klasse (und anderen verwendeten Klassen): im Klassenpfad des Bootprogramms, in den installierten Erweiterungen und im Benutzerklassenpfad. Die nach dem Klassennamen oder JAR-Dateinamen angegebenen Argumente werden an die Hauptfunktion übermittelt.

Der Befehl javaw ist identisch mit dem Befehl java, außer dass beim Verwenden des Befehls javaw kein zugeordnetes Konsolfenster angezeigt wird. Verwenden Sie den Befehl javaw, wenn kein Fenster mit einer Eingabeaufforderung angezeigt werden soll. Der Startbefehl javaw zeigt im Falle eines fehlgeschlagenen Starts ein Dialogfenster mit Fehlerinformationen an.

Die Befehle java und javaw haben folgende Syntax:

    java [ Optionen ] Klasse [ Argumente ... ]
    java [ Optionen ] -jar Datei.jar [ Argumente ... ]
    javaw [ Optionen ] Klasse [ Argumente ... ]
    javaw [ Optionen ] -jar Datei.jar [ Argumente ... ]

Elemente in eckigen Klammern sind optional.

Optionen
  Befehlszeilenoptionen.
Klasse
  Der Name der Klasse, die aufgerufen werden soll.
Datei.jar
  Der Name der JAR-Datei, die aufgerufen werden soll. Sie wird nur mit der Option -jar verwendet.
Argumente
  Die Argumente, die an die Funktion main weitergeleitet werden.

Wenn die Option -jar angegeben wurde, enthält die benannte JAR-Datei Klassen- und Ressourcendateien für die Anwendung, wobei die Systemstartklasse über den Manifestheader für die Hauptklasse angegeben wird.

## Optionen

Das Startprogramm verfügt über mehrere Standardoptionen, die in der aktuellen Laufzeitumgebung und auch in zukünftigen Releases unterstützt werden. Daneben gibt es mehrere vom Standard abweichende Optionen. Die Standardoptionen wurden für die beste allgemeine Verwendung ausgewählt. Gehen Sie deshalb bei Änderungen vorsichtig vor.

### Angeben von Java-Optionen und Systemmerkmalen

Sie können Java-Optionen und Systemmerkmale auf drei verschiedene Arten angeben. Diese sind im Folgenden aufgelistet (nach Priorität):

1. Durch Angeben der Option oder des Merkmals in der Befehlszeile. Beispiel:`java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MeineJavaKlasse`.
2. Durch Erstellen einer Datei, die die Optionen enthält, und Angeben der Datei in der Befehlszeile mit -Xoptionsfile=<Dateiname>.
3. Durch Erstellen einer Umgebungsvariablen namens IBM_JAVA_OPTIONS mit den Optionen, z. B. `set IBM_JAVA_OPTIONS="-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump"`.

Die Optionen, die in der Befehlszeile ganz rechts stehen, haben Vorrang vor den Optionen, die ganz links stehen. Wenn Sie z. B. die Optionen `-Xint -Xjit meineKlasse` angeben, hat -Xjit Vorrang.

### Standardoptionen

- -D<Merkmalname>=<Wert>
  - Definiert ein Systemmerkmal.
- -assert
  - Zeigt Hilfe für auf Festlegungen bezogene Optionen an.
- -cp oder -classpath <durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>
  - Definiert den Suchpfad für Anwendungsklassen und -ressourcen. Wenn die Optionen -classpath und -cp nicht verwendet werden und wenn CLASSPATH nicht definiert wurde, ist der Benutzerklassenpfad standardmäßig das aktuelle Verzeichnis (.).
- -help oder -?
  - Zeigt einen Benutzungshinweis an.
- -showversion
  - Zeigt die Produktversion an und setzt den Vorgang fort.
- -verbose:[class,gcterse,gc,dynload,stackwalk,sizes,stack,debug,jni]
  - Aktiviert die ausführliche Ausgabe.
- -version
  - Zeigt die Produktversion an.
- -version:<Wert>
  - Setzt voraus, dass die angegebene Version ausgeführt wird.
- -jre-restrict-search
  - Nimmt private Benutzer-JREs in die Versionssuche auf.
- -no-jre-restrict-search
  - Schließt private Benutzer-JREs von der Versionssuche aus.
- -agentlib:<Bibliotheksname>[=<Optionen>]
  - Lädt die native Agentenbibliothek <Bibliotheksname>, z. B. -agentlib:hprof. Geben Sie -agentlib:jdwp=help und -agentlib:hprof=help in der Befehlszeile an, um weitere Informationen zu erhalten.
- -agentpath:Bibliotheksname[=<Optionen>]
  - Lädt die native Agentenbibliothek mit dem vollständigen Pfadnamen.
- -javaagent:<JAR-Pfad>[=<Optionen>]
  - Lädt den Java-Programmiersprachenagenten. Weitere Informationen finden Sie in der Dokumentation zur API java.lang.instrument.
- -X
  - Zeigt Hilfe für vom Standard abweichende Optionen an.

### Vom Standard abweichende Optionen

Bei den unten aufgelisteten -X-Optionen handelt es sich um Optionen, die vom Standard abweichen und jederzeit ohne vorherige Ankündigung geändert werden können.

In Optionen, die den Parameter <Größe> enthalten, müssen Sie der Zahl ein "k" oder "K" für Kilobyte, ein "m" oder "M" für Megabyte oder ein "g" oder "G" für Gigabyte voranstellen.

- -Xargencoding
  - Mit dieser Option können Sie Unicode-Escapezeichenfolgen in die Argumentenliste aufnehmen. Sie ist standardmäßig inaktiviert.
- -Xbootclasspath:<durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>
  - Definiert den Suchpfad für Bootklassen und -ressourcen. Standardmäßig wird in den internen VM-Verzeichnissen und JAR-Dateien nach Bootklassen und -ressourcen gesucht.
- -Xbootclasspath/a:<durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>
  - Fügt die angegebenen Verzeichnisse, ZIP- oder JAR-Dateien am Ende des Bootklassenpfads hinzu. Standardmäßig wird in den internen VM-Verzeichnissen und JAR-Dateien nach Bootklassen und -ressourcen gesucht.
- -Xbootclasspath/p:<durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>
  - Fügt die angegebenen Verzeichnisse, ZIP- oder JAR-Dateien am Anfang des Bootklassenpfads hinzu. Implementieren Sie keine Anwendungen, bei denen mit der Option -Xbootclasspath: oder -Xbootclasspath/p: eine Klasse in der Standard-API überschrieben wird, da eine solche Implementierung gegen die Java 2 Runtime Environment-Binärcodelizenz verstößt. Standardmäßig wird in den internen VM-Verzeichnissen und JAR-Dateien nach Bootklassen und -ressourcen gesucht.
- -Xcheck:jni
  - Führt zusätzliche Prüfungen für JNI-Funktionen aus. Sie können auch die Option -Xrunjnichk verwenden. Standardmäßig wird keine Prüfung ausgeführt.
- -Xcheck:nabounds
  - Führt zusätzliche Prüfungen für JNI-Bereichsoperationen aus. Sie können auch die Option -Xrunjnichk verwenden. Standardmäßig wird keine Prüfung ausgeführt.
- |-Xclassgc |
  |
  - Erfasst Klassenobjekte bei jeder Garbage-Collection. |Diese Option ist standardmäßig aktiviert.
- -Xcompactexplicitgc
  - Komprimiert bei jedem Aufruf an `System.gc()`. Siehe auch -Xnocompactexplicitgc. Standardmäßig wird die Komprimierung nur ausgeführt, wenn sie intern ausgelöst wird.
- -Xcompactgc
  - Komprimiert alle Garbage-Collector-Zyklen. Siehe auch -Xnocompactgc. Standardmäßig wird die Komprimierung nur ausgeführt, wenn sie intern ausgelöst wird.
- |-Xconcurrentbackground <Anzahl> |
  |
  - Gibt die Anzahl der Hintergrundthreads mit niedriger Priorität an, die während der Garbage-Collection-Phase der gleichzeitigen Markierung zur Unterstützung der Mutator-Threads zugeordnet sind. Die Standardeinstellung lautet 1.
- |-Xconcurrentlevel <Zahl> |
  |
  - Gibt die Zuordnungsauslastungsrate an. Sie gibt das Verhältnis zwischen dem zugeordneten und dem markierten Freispeicher an. Die Standardeinstellung lautet 8.
- |-Xconmeter:<soa | loa | dynamic> |
  |
  - Legt fest, für welchen Speicherbereich (LOA oder SOA) die Belegung gemessen wird, und folglich, welche Zuordnungen während der gleichzeitigen Markierung belastet werden. Mit -Xconmeter:soa wird die Zuordnungsauslastung für Zuordnungen über den SOA (Small Object Area) und mit -Xconmeter:loa die Zuordnungsauslastung für Zuordnungen über den LOA (Large Object Area) verwendet. Wenn -Xconmeter:dynamic angegeben ist, legt der Collector dynamisch fest, welcher Bereich gemessen werden soll, basierend darauf, welcher Bereich (SOA oder LOA) zuerst ausgelastet ist. Standardmäßig ist die Option auf -Xconmeter:soa gesetzt.
- -Xdbg:<Optionen>
  - Lädt Debugbibliotheken, damit das ferne Debugging von Anwendungen unterstützt wird. Dies ist identisch mit -Xrunjdwp. Standardmäßig werden die Debugbibliotheken nicht geladen, und die VM-Instanz wird für das Debugging nicht aktiviert.
- -Xdbginfo:<Pfad zur Symboldatei>
  - Lädt und übergibt Optionen an den Debuginformationsserver. Der Debuginformationsserver ist standardmäßig inaktiviert.
- -Xdebug
  - Startet JVM mit aktiviertem Debugger. Der Debugger ist standardmäßig inaktiviert.
- |-Xdisableexcessivegc |
  |
  - Inaktiviert die Auslösung der Ausnahmebedingung `OutOfMemory`, wenn in der Garbage-Collection zu viel Zeit benötigt wurde. Diese Option ist standardmäßig inaktiviert.
- -Xdisableexplicitgc
  - Signalisiert VM, dass Aufrufe an `System.gc()` keine Auswirkung haben. Aufrufe an `System.gc()` lösen standardmäßig eine Garbage-Collection aus.
- |-Xdisablestringconstantgc |
  |
  - Verhindert, dass Zeichenfolgen in der zeichenfolgeninternen Tabelle erfasst werden. |Diese Option ist standardmäßig inaktiviert.
- -Xdisablejavadump
  - Inaktiviert die Generierung von Java-Speicherauszügen bei Fehlern und Signalen. Die Generierung von Java-Speicherauszügen ist standardmäßig aktiviert.
- |-Xenableexcessivegc |
  |
  - Wenn in der GC zu viel Zeit beansprucht wird, gibt diese Option für eine Zuordnungsanforderung NULL zurück, wodurch die Ausnahmebedingung `OutOfMemory` ausgelöst wird. Diese Aktion erfolgt nur, wenn der Freispeicher vollständig ausgelastet ist und die benötigte Zeit mindestens 95 % beträgt. Dies ist das Standardverhalten.
- |-Xenablestringconstantgc |
  |
  - Ermöglicht die Erfassung von Zeichenfolgen aus der internen Zeichenfolgentabelle. |Diese Option ist standardmäßig aktiviert.
- -Xfuture
  - Aktiviert genaue Formatprüfungen von Klassendateien. Verwenden Sie diese Option für die Entwicklung von neuem Code, da in den zukünftigen Releases standardmäßig genauere Prüfungen ausgeführt werden. Genaue Formatprüfungen sind standardmäßig inaktiviert.
- -Xgcpolicy:[optthruput]|[optavgpause]|[gencon]
  - Steuert das Verhalten des Garbage-Collectors. Die Option optthruput ist die Standardeinstellung und ermöglicht einen sehr hohen Anwendungsdurchsatz, wobei jedoch gelegentliche Pausen auftreten. Die Option optavgpause verringert die Zeit dieser Garbage-Collection-Pausen. Außerdem wird der Effekt eines höheren Freispeicherumfangs während der Garbage-Collection-Pause begrenzt. Verwenden Sie optavgpause, wenn Ihre Konfiguration über einen sehr großen Freispeicher verfügt. Die Option gencon fordert die kombinierte Verwendung von gleichzeitig ablaufendem GC und GC nach Objektalter an, um alle Garbage-Collection-Pausen zu verringern. Weitere Informationen finden Sie im Abschnitt Angeben der Garbage-Collection-Richtlinie.
- -Xgcthreads<Anzahl Threads>
  - Definiert die Anzahl der Helper-Threads, die für Paralleloperationen während der Garbage-Collection verwendet werden. Standardmäßig entspricht die Anzahl Threads der Anzahl vorhandener physischer CPUs minus 1 (mindestens 1).
- |-Xgcworkpackets <Anzahl> |
  |
  - Gibt die Gesamtzahl der Vorgangspakete an, die im globalen Collector zur Verfügung stehen. Wenn keine Anzahl angegeben ist, ordnet der Collector auf Grundlage der maximalen Größe des Freispeichers eine Paketzahl zu.
- -Xint
  - Mit Hilfe dieser Option verwendet JVM nur den Interpreter. Der JIT-Compiler (Just-In-Time) wird inaktiviert. Der JIT-Compiler ist standardmäßig aktiviert.
- -Xiss<Größe>
  - Definiert die ursprüngliche Größe des Java-Thread-Stacks. Standardmäßig sind 2 Kilobyte angegeben.
- -Xjit[:<Unteroption>,<Unteroption>,...]
  - Aktiviert den JIT-Compiler. Weitere Informationen zu den Unteroptionen finden Sie im Handbuch Diagnostics Guide. Siehe auch -Xnojit. Der JIT-Compiler ist standardmäßig aktiviert.
- -Xlinenumbers
  - Zeigt Zeilennummern in Stack-Traces für das Debugging an. Siehe auch -Xnolinenumbers. Zeilennummern sind standardmäßig aktiviert.
- |-Xloa |
  |
  - Diese Option ordnet einen LOA (Large Object Area) zu. Objekte werden diesem LOA statt dem SOA zugeordnet. Standardmäßig ist der LOA für alle GC-Richtlinien aktiviert, mit Ausnahme des Speicherteilbereichs, in dem der LOA nicht verfügbar ist. Siehe auch -Xnoloa.
- |-Xloainitial <Zahl> |
  |
  - <Zahl> liegt zwischen 0 und 0,95 und gibt den Anfangsprozentsatz des aktuellen Bereichs für alte Objekte an, der dem LOA (Large Object Area) zugeordnet ist. Die Standardeinstellung lautet 0,05 oder 5 %.
- |-Xloamaximum <Zahl> |
  |
  - <Zahl> liegt zwischen 0 und 0,95 und gibt den maximalen Prozentsatz des aktuellen Bereichs für alte Objekte an, der dem LOA (Large Object Area) zugeordnet ist. Die Standardeinstellung lautet 0,5 oder 50 %.
- |-Xlp (Windows 2003) |
  |
  - Fordert JVM auf, Java-Freispeicher mit großen Seiten zuzuordnen. Wenn keine großen Seiten zur Verfügung stehen, startet JVM nicht, und die folgende Fehlernachricht wird angezeigt: `GC: Systemkonfiguration unterstützt Option '-Xlp' nicht`. Große Seiten werden von Systemen unter Windows 2003 unterstützt, bei denen das Betriebssystem für die Verwendung großer Seiten konfiguriert wurde. Standardmäßig werden keine großen Seiten verwendet. |Siehe Konfigurieren einer Speicherzuordnung von großen Seiten.
- -Xmaxe<Größe>
  - Definiert den Maximalwert, um den der Garbage-Collector den Freispeicher erweitert. Standardmäßig erweitert der Garbage-Collector den Freispeicher, wenn sich der freie Speicherbereich auf unter 30 % verringert (oder um den Wert, der mit -Xminf angegeben wurde). Der Freispeicher wird dann um den Wert erweitert, der für die Wiederherstellung von 30 % freiem Speicherbereich erforderlich ist. Die Option -Xmaxe begrenzt die Erweiterung auf den angegeben Wert. Beispielsweise begrenzt die Angabe von `-Xmaxe10M` die Erweiterung auf 10 MB. Standardmäßig ist keine maximale Größe für die Erweiterung angegeben.
- -Xmaxf<Größe>
  - Definiert den maximalen Prozentsatz des Freispeichers, der nach einer Garbage-Collection frei sein muss. Wenn der freie Speicherbereich diesen Prozentsatz überschreitet, versucht JVM, den Freispeicher zu verkleinern. Geben Sie die Größe als Dezimalwert im Bereich von 0-1 an. Z. B. setzt die Angabe `-Xmaxf0.5` den maximalen freien Speicherbereich auf 50 %. Der Standardwert lautet 0,6 (60 %).
- -Xmca<Größe>
  - Definiert den Erweiterungsschritt für den Speicher, der zum Speichern des Arbeitsspeicherabschnitts für geladene Klassen zugeordnet wurde. Wenn mehr Speicher zum Speichern von Klassen im Arbeitsspeicher erforderlich ist, wird der zugeordnete Speicher um diesen Wert erhöht. Standardmäßig lautet der Erweiterungsschritt 32 K.
- -Xmco<Größe>
  - Definiert den Erweiterungsschritt für den Speicher, der zum Speichern des ROM-Abschnitts für geladene Klassen zugeordnet wurde. Wenn mehr Speicher zum Speichern von Klassen im ROM erforderlich ist, wird der zugeordnete Speicher um diesen Wert erhöht. Standardmäßig lautet der Erweiterungsschritt 128 K.
- -Xmine<Größe>
  - Definiert den Mindestwert, um den der Garbage-Collector den Freispeicher erweitert. Standardmäßig erweitert der Garbage-Collector den Freispeicher um den Wert, der für die Wiederherstellung von 30 % freiem Speicherbereich erforderlich ist (oder um den Wert, der mit -Xminf angegeben wurde). Die Option -Xmine setzt die Erweiterung mindestens auf den angegebenen Wert. Beispielsweise wird mit der Angabe `-Xmine50M` eine Mindesterweiterungsgröße von 50 MB angegeben. Standardmäßig lautet die Erweiterungsgröße 1 MB.
- -Xminf<Größe>
  - Definiert den Mindestprozentsatz des Freispeichers, der nach einer Garbage-Collection frei sein sollte. Wenn der freie Speicherbereich diesen Wert unterschreitet, versucht JVM, den Freispeicher zu erweitern. Geben Sie die Größe als Dezimalwert zwischen 0 und 1 an. Mit `-Xminf0.3` z. B. wird freier Speicherbereich angefordert, der mindestens 30 % des Freispeichers beträgt. Standardmäßig lautet der Mindestwert 0,3.
- -Xmn<Größe>
  - Legt für die Anfangsgröße und die maximale Größe des neuen Freispeichers den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Ist äquivalent mit der Definition von -Xmns und -Xmnx. |Wenn Sie -Xmns oder -Xmnx definieren, können Sie -Xmn nicht definieren. Wenn Sie versuchen, -Xmn mit Hilfe von -Xmns oder -Xmnx zu definieren, startet VM nicht, und eine Fehlermeldung wird zurückgegeben. -Xmn wird standardmäßig intern ausgewählt, je nach der Funktionalität Ihres Systems. Mit der Option -verbose:sizes können Sie die Werte ermitteln, die JVM zurzeit verwendet.
- -Xmns<Größe>
  - Legt für die Anfangsgröße des neuen Freispeichers den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Diese Option wird standardmäßig intern ausgewählt, je nach der Funktionalität Ihres Systems. |Diese Option gibt eine Fehlermeldung zurück, wenn Sie sie mit der Option -Xmn verwenden.
- -Xmnx<Größe>
  - Legt für die maximale Größe des neuen Freispeichers den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Diese Option wird standardmäßig intern ausgewählt, je nach der Funktionalität Ihres Systems. |Diese Option gibt eine Fehlermeldung zurück, wenn Sie sie mit der Option -Xmn verwenden.
- -Xmo<Größe>
  - Legt für die Anfangsgröße und die maximale Größe des Freispeichers für alte Objekte den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Ist äquivalent zur Definition von -Xmos und -Xmox. |Wenn Sie -Xmos oder -Xmox definieren, können Sie -Xmo nicht definieren. Wenn Sie versuchen, -Xmo mit Hilfe von -Xmos oder -Xmox zu definieren, startet VM nicht, und eine Fehlermeldung wird zurückgegeben. Standardmäßig wird -Xmo intern ausgewählt, je nach der Funktionalität Ihres Systems. Mit der Option -verbose:sizes können Sie die Werte ermitteln, die JVM zurzeit verwendet.
- -Xmos<Größe>
  - Legt für die Anfangsgröße des Freispeichers für alte Objekte den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Diese Option wird standardmäßig intern ausgewählt, je nach der Funktionalität Ihres Systems. |Diese Option gibt eine Fehlermeldung zurück, wenn Sie sie zusammen mit der Option -Xmo verwenden.
- -Xmox<Größe>
  - Legt für die maximale Größe des Freispeichers für alte Objekte den angegebenen Wert fest, wenn -Xgcpolicy:gencon verwendet wird. Diese Option wird standardmäßig intern ausgewählt, je nach der Funktionalität Ihres Systems. |Diese Option gibt eine Fehlermeldung zurück, wenn Sie sie zusammen mit der Option -Xmo verwenden.
- -Xmoi<Größe>
  - Definiert den Wert, um den der Java-Freispeicher stufenweise erweitert wird, wenn -Xgcpolicy:gencon verwendet wird. Wenn der Wert null beträgt, ist keine Erweiterung zulässig. Die Größe der einzelnen Stufen wird standardmäßig auf der Grundlage der Erweiterungsgröße, -Xmine und -Xminf berechnet.
- -Xmr<Größe>
  - Definiert die Größe für die "gemerkte Gruppe" der Garbage-Collection, wenn -Xgcpolicy:gencon verwendet wird. Es handelt sich um eine Liste mit Objekten im alten Freispeicher, die auf Objekte im neuen Freispeicher verweisen. Die Standardeinstellung für diese Option lautet 16 Kilobyte.
- -Xms<Größe>
  - Definiert die Anfangsgröße des Java-Freispeichers. Sie können auch -Xmo verwenden. Der Standardwert wird intern entsprechend der Funktionalität Ihres Systems definiert.
- -Xmso<Größe>
  - Definiert die C-Stack-Größe für verzweigte Java-Threads. Die Standardeinstellung für diese Option lautet 32 Kilobyte auf 32-Bit-Plattformen und 256 Kilobyte auf 64-Bit-Plattformen.
- -Xmx<Größe>
  - Definiert die maximale Größe des Java-Freispeichers. Diese Option wird standardmäßig intern entsprechend der Funktionalität Ihres Systems definiert.
- -Xnoclassgc
  - Inaktiviert die Garbage-Collection für Klassen. Diese Option inaktiviert die Garbage-Collection für Speicher, der Java-Klassen zugeordnet ist, die nicht mehr von JVM verwendet werden sollen. Das Standardverhalten ist -Xclassgc.
- -Xnocompactgc
  - Inaktiviert die Komprimierung für den Garbage-Collector. Siehe auch -Xcompactgc. Die Komprimierung ist standardmäßig aktiviert.
- -Xnocompactexplicitgc
  - Inaktiviert die Komprimierung beim Aufruf an `System.gc()`. Siehe auch -Xcompactexplicitgc. Die Komprimierung ist bei Aufrufen an `System.gc()` standardmäßig aktiviert.
- -Xnojit
  - Inaktiviert den JIT-Compiler. Siehe auch -Xjit. Der JIT-Compiler ist standardmäßig aktiviert.
- -Xnolinenumbers
  - Inaktiviert die Zeilennummern für das Debugging. Siehe auch -Xlinenumbers. Zeilennummern sind standardmäßig aktiviert.
- |-Xnoloa |
  |
  - Diese Option verhindert die Zuordnung eines LOAs (Large Object Area). Alle Objekte werden im SOA zugeordnet. Standardmäßig ist der LOA für alle GC-Richtlinien aktiviert, mit Ausnahme des Speicherteilbereichs, in dem der LOA nicht verfügbar ist. Siehe auch -Xloa.
- -Xnopartialcompactgc
  - Inaktiviert die schrittweise ausgeführte Komprimierung. Siehe auch -Xpartialcompactgc. Diese Option ist standardmäßig nicht definiert, somit werden alle Komprimierungen vollständig ausgeführt.
- -Xnosigcatch
  - Inaktiviert den JVM-Signalverarbeitungscode. Siehe auch -Xsigcatch. Die Signalverarbeitung ist standardmäßig aktiviert.
- -Xnosigchain
  - Inaktiviert die Verkettung von Signalroutinen. Siehe auch -Xsigchain. Die Verkettung von Signalroutinen ist standardmäßig aktiviert.
- -Xoptionsfile=<Datei>
  - Gibt eine Datei an, die JVM-Optionen und die zugehörigen Definitionen enthält. Standardmäßig wird keine Optionsdatei verwendet.
- -Xoss<Größe>
  - Definiert die Java-Stackgröße und die C-Stackgröße für einen beliebigen Thread. Diese Option wird aus Kompatibilitätsgründen zur Verfügung gestellt und entspricht der Einstellung von -Xss und von -Xmso auf den angegebenen Wert.
- -Xpartialcompactgc
  - Inaktiviert die Teilkomprimierung. Siehe auch -Xnopartialcompactgc.
- -Xquickstart
  - Verbessert die Startzeit durch das Verzögern der JIT-Kompilierung und der Optimierungen. Diese Option ist standardmäßig inaktiviert und die JIT-Kompilierung wird nicht verzögert.
- -Xrdbginfo:<Host>:<Port>
  - Lädt und übergibt Optionen an den fernen Debuginformationsserver. Der ferne Debuginformationsserver ist standardmäßig inaktiviert.
- -Xrs
  - Reduziert die Verwendung von Betriebssystemsignalen. JVM nutzt die Betriebssystemsignale standardmäßig vollständig. Siehe Von JVM verwendete Signale.
- -Xrun<Bibliotheksname>[:Optionen]
  - Lädt Bibliotheken mit Hilfeprogrammen. Geben Sie zum Laden mehrerer Bibliotheken diese Option mehrmals in der Befehlszeile an. Beispiele für diese Bibliotheken:
    - -Xrunhprof[:help] | [:<Option>=<Wert>, ...]
      - Erstellt Profile für Freispeicher, CPU oder Überwachungsprogramme. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.
    - -Xrunjdwp[:help] | [:<Option>=<Wert>, ...]
      - Lädt Debugbibliotheken, damit das ferne Debugging von Anwendungen unterstützt wird. Ist identisch mit -Xdbg. Weitere Informationen finden Sie im Abschnitt Debugging in Java-Anwendungen.
    - -Xrunjnichk[:help] | [:<Option>=<Wert>, ...]
      - Führt zusätzliche Prüfungen für JNI-Funktionen aus, um Fehler in den nativen Programmen nachzuvollziehen, die über JNI auf JVM zugreifen. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.
- |-Xscmx<Größe>[k|m|g] |
  |
  - Weitere Informationen zu -Xscmx finden Sie im Abschnitt Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen.
- |-Xshareclasses:<Unteroptionen> |
  |
  - Weitere Informationen zu den -Xshareclasses-Unteroptionen finden Sie im Abschnitt Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen.
- -Xsigcatch
  - Aktiviert den VM-Signalverarbeitungscode. Siehe auch -Xnosigcatch. Die Signalverarbeitung ist standardmäßig aktiviert.
- -Xsigchain
  - Aktiviert die Verkettung von Signalroutinen. Siehe auch -Xnosigchain. Die Verkettung von Signalroutinen ist standardmäßig aktiviert.
- |-Xsoftrefthreshold<Anzahl> |
  |
  - Definiert die Anzahl GCs. Anschließend wird ein indirekter Verweis gelöscht, wenn das zugehörige Verweisobjekt nicht markiert wurde. Die Standardeinstellung lautet 3. Dies bedeutet, dass der indirekte Verweis bei der dritten GC, bei der das Verweisobjekt nicht markiert ist, gelöscht wird.
- -Xss<Größe>
  - Definiert die Maximalgröße für den Java-Stack für einen beliebigen Thread. Die Standardeinstellung dieser Option lautet 256 KB.
- -Xthr:<Optionen>
  - Definiert die Threading-Optionen.
- -Xverbosegclog:<Dateipfad><Dateiname>[X, Y]
  - Die verboseGC-Ausgabe wird in die angegebene Datei geschrieben. Wenn die Datei bereits vorhanden ist, wird sie überschrieben. Ist dies nicht der Fall, wird die Ausgabe an stderr umgeleitet, falls eine vorhandene Datei nicht geöffnet oder eine neue Datei nicht erstellt werden kann. Wenn Sie die Argumente X und Y (bei beiden handelt es sich um ganze Zahlen) angeben, wird die verboseGC-Ausgabe an X Dateien umgeleitet, von denen jede Y gc-Zyklen mit verboseGC-Ausgaben enthält. Diese Dateien weisen folgendes Format auf: Dateiname1, Dateiname2 usw. Die verboseGC-Protokollierung wird nicht standardmäßig durchgeführt.
- -Xverify
  - Aktiviert die genaue Prüfung aller geladenen Klassen. Die genaue Prüfung von Klassen ist standardmäßig inaktiviert.
- -Xverify:none
  - Inaktiviert die genaue Prüfung von Klassen. Die genaue Prüfung von Klassen ist standardmäßig inaktiviert.

## Abrufen der IBM Build- und Versionsnummer

Geben Sie den folgenden Befehl an einer Eingabeaufforderung ein, um die IBM Build- und Versionsnummer abzurufen:

    java -version

## Globalisierung des Befehls 'java'

Mit dem Befehl java und mit anderen Java-Startbefehlen (wie beispielsweise javaw) kann ein Klassenname mit beliebigen Zeichen angegeben werden, die im Zeichensatz der aktuellen Ländereinstellung enthalten sind.

Mit Hilfe von Java-Escapezeichenfolgen können Sie auch alle im Klassennamen und in den Argumenten enthaltenen Unicode-Zeichen angeben. Für diesen Vorgang müssen Sie die Option -Xargencoding angeben. Verwenden Sie zum Angeben eines Unicode-Zeichens Escapezeichenfolgen im Format `\u####`. Dabei ist # eine Hexadezimalziffer (0-9, A-F).

Wenn Sie angeben möchten, dass der Klassenname und die Befehlsargumente im UTF8-Code verschlüsselt sind, verwenden Sie -Xargencoding:utf8 oder -Xargencoding:latin für die ISO8859_1-Verschlüsselung.

Wenn Sie beispielsweise eine Klasse mit dem Namen "HelloWorld" angeben möchten und für die beiden Großbuchstaben die Unicode-Verschlüsselung verwenden, müssen Sie den folgenden Befehl ausführen:

    java -Xargencoding '\u0048ello\u0057orld'

Mit den Befehlen java und javaw werden übersetzte Ausgabenachrichten angezeigt. Diese Nachrichten unterscheiden sich je nach der Ländereinstellung, in der Java ausgeführt wird. Die ausführlichen Fehlerbeschreibungen und andere Debuginformationen, die vom Befehl java zurückgegeben werden, werden in Englisch angezeigt.

## Automatisches Ausführen einer Java-Datei

Klicken Sie zum Definieren einer Java-Klasse oder JAR-Datei, damit diese automatisch über die Datei ausgeführt wird, im Windows-Explorer Extras->Ordneroptionen->Dateitypen an. Sie können auch Folgendes an einer Eingabeaufforderung eingeben:

    assoc .class=javaclass
    ftype javaclass=C:\Programme\IBM\Java50\jre\bin\java.exe %l %*

Anmerkungen:

1. Bei `%l` handelt es sich um den Buchstaben l und nicht die Zahl 1.
2. Wenn Java in einem anderen Verzeichnis als C:\Programme\IBM\Java50\ installiert wurde, müssen Sie das entsprechende Verzeichnis angeben.

## Ausführen von Java-Anwendungen mit Technologien für behindertengerechte Bedienung

Sun stellt das Produkt Java Access Bridge bereit, mit dem native Windows-Technologien für behindertengerechte Bedienung, z. B. Sprachausgabesysteme (Screen Reader), auf die Java Accessibility-Unterstützung in einer Java-Anwendung zugreifen können. Diese nativen Windows-Technologien für behindertengerechte Bedienung müssen Aufrufe an Java Access Bridge unterstützen.

Java Access Bridge ist bei Sun erhältlich und umfasst ein Installationsprogramm, das die folgenden fünf Dateien in die richtigen Verzeichnisse kopiert: access-bridge.jar, jaccess.jar, accessibility.properties, JavaAccessBridge.dll und WindowsAccessBridge.dll. IBM stellt eine Kopie der Datei jaccess.jar im entsprechenden Verzeichnis für die Verwendung mit JawBridge zur Verfügung.

Wenn IBM Accessibility Bridge (JawBridge), das die Verwendung von Windows 2000 Magnifier zusammen mit Swing-Anwendungen ermöglicht, bereits aktiviert ist, und wenn Sie JawBridge und Java Access Bridge gleichzeitig aktivieren wollen, editieren Sie die folgende Zeile in der Datei accessibility.properties:

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

Sie können die beiden Bridges inaktivieren, indem Sie am Anfang der Zeile ein Nummernzeichen `#` eingeben. Auf der folgenden Website finden Sie Informationen zum Herunterladen der Java Access Bridge:

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

## JIT-Compiler (Just-In-Time)

Der IBM JIT-Compiler (Just-In-Time) generiert dynamisch Maschinencode für häufig verwendete Bytecodesequenzen in Java-Anwendungen und Java-Applets, während diese ausgeführt werden. |Der JIT-Compiler Version 5.0 bietet neue Optimierungen als Ergebnis der Compiler-Forschung, verbessert Optimierungen, die in vorherigen Versionen des JIT-Compilers implementiert wurden, und bietet bessere Hardware-Nutzung.

IBM SDK und Runtime Environment enthalten den JIT-Compiler, der standardmäßig in Benutzeranwendungen und in SDK-Tools aktiviert ist. In der Regel besteht keine Notwendigkeit, den JIT-Compiler explizit aufzurufen. Die Kompilierung des Java-Bytecodes in Maschinencode erfolgt transparent. Wenn jedoch ein Problem mit Runtime Environment bei der Ausführung einer Java-Anwendung oder eines Java-Applets auftritt, können Sie den JIT-Compiler inaktivieren, um das Problem leichter eingrenzen zu können. Der JIT-Compiler sollte nur vorübergehend inaktiviert werden, da er für eine adäquate Leistung erforderlich ist.

### Inaktivieren des JIT-Compilers

Zum Inaktivieren des JIT-Compilers haben Sie drei Möglichkeiten:

- Setzen Sie die Umgebungsvariable JAVA_COMPILER auf "NONE" oder auf eine leere Zeichenfolge, bevor Sie die Java-Anwendung ausführen.

  Geben Sie an der Eingabeaufforderung, an der die Anwendung ausgeführt wird, Folgendes ein:

      set JAVA_COMPILER=NONE

  Sie können JAVA_COMPILER auch permanent über die grafische Benutzerschnittstelle festlegen. Öffnen Sie Systemsteuerung, wählen Sie System aus, zeigen Sie die Indexzunge Erweitert an, und wählen Sie Umgebungsvariablen aus.

- Verwenden Sie die Option -D in der JVM-Befehlszeile, um das Merkmal java.compiler auf "NONE" oder auf eine leere Zeichenfolge zu setzen:

      java -Djava.compiler=NONE MeineAnwendung

- Verwenden Sie die Option -Xint in der JVM-Befehlszeile. Beispiel:

      java -Xint MeineAnwendung

Beide Befehlszeilenoptionen überschreiben die Umgebungsvariable JAVA_COMPILER.

### Aktivieren des JIT-Compilers

Setzen Sie zum expliziten Aktivieren des JIT-Compilers die Umgebungsvariable JAVA_COMPILER auf "jitc", oder verwenden Sie die Option -D, um das Merkmal java.compiler auf "jitc" zu setzen. Sie können in der JVM-Befehlszeile auch die Option -Xjit verwenden (und die Option -Xint weglassen), um den JIT-Compiler zu aktivieren.

Wenn die Umgebungsvariable JAVA_COMPILER oder das Merkmal java.compiler auf "" (leere Zeichenfolge) gesetzt ist, bleibt der JIT-Compiler inaktiviert. Geben Sie `set JAVA_COMPILER=` an der Eingabeaufforderung ein, um die Einstellung der Umgebungsvariablen ordnungsgemäß aufzuheben.

### Prüfen, ob der JIT-Compiler aktiviert ist

Wenn Sie prüfen wollen, ob der JIT-Compiler aktiviert ist, geben Sie an der Eingabeaufforderung Folgendes ein:

    java -version

Wenn der JIT-Compiler derzeit nicht verwendet wird, wird folgende Nachricht angezeigt:

    (JIT disabled)

Wenn der JIT-Compiler verwendet wird, wird folgende Nachricht angezeigt:

    (JIT enabled)

Weitere Informationen zum JIT-Compiler finden Sie im Handbuch Diagnostics Guide.

## Angeben der Garbage-Collection-Richtlinie

Der Garbage-Collector verwaltet den von Java und von den Anwendungen verwendeten Speicher, die mit VM ausgeführt werden.

Sobald der Garbage-Collector eine Speicheranforderung empfängt, wird hierfür nicht verwendeter Freispeicher vorgesehen. Dies wird auch als "Zuordnung" bezeichnet. Der Garbage-Collector prüft außerdem, ob Speicherbereiche vorhanden sind, auf die nicht mehr verwiesen wird, und gibt sie zur erneuten Verwendung frei. Dies wird auch als "Erfassung" bezeichnet.

Die Erfassungsphase kann durch einen Fehler bei der Hauptspeicherzuordnung ausgelöst werden, der dann auftritt, wenn für Speicheranforderungen kein weiterer Speicherbereich mehr vorhanden ist. Sie kann aber auch über einen expliziten System.gc()-Aufruf ausgelöst werden.

Die Garbage-Collection kann erhebliche Auswirkungen auf die Anwendungsleistung haben. IBM VM stellt daher verschiedene Methoden zur Verfügung, über die die Ausführung der Garbage-Collection optimiert werden kann. Dadurch verringern sich die Auswirkungen auf Ihre Anwendungen.

Ausführliche Informationen zur Garbage-Collection finden Sie im Handbuch Diagnostics Guide.

### Optionen der Garbage-Collection

Die Option -Xgcpolicy gibt die Garbage-Collection-Richtlinie an.

-Xgcpolicy nimmt die Werte optthruput (Standardwert und empfohlener Wert), optavgpause oder gencon an. Die Option steuert das Verhalten der Garbage-Collection, so dass zwischen dem Durchsatz der Anwendung und des Gesamtsystems und den durch die Garbage-Collection verursachten Pausezeiten abgewogen werden kann.

Das Format der Option und der zugehörigen Werte lautet wie folgt:

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

> -Xgcpolicy:gencon

### Pausezeit

Wenn eine Anwendung wegen des verfügbaren Freispeichers nicht sofort ein Objekt erstellen kann, ist der Garbage-Collector für die Erkennung von Objekten ohne Verweis (Garbage) zuständig sowie für deren Löschung und für die Wiederherstellung eines Freispeicherstatus, mit dem sofortige und nachfolgende Zuordnungsanforderungen schnell beantwortet werden können. Solche Garbage-Collection-Zyklen ergeben gelegentliche unerwartete Pausen bei der Ausführung des Anwendungscodes. Wenn sich die Größe und Komplexität der Anwendungen erhöht und wenn die Freispeicher entsprechend umfangreicher werden, tendiert diese Pausezeit der Garbage-Collection dazu, größer zu werden. Der Standardwert -Xgcpolicy:optthruput für die Garbage-Collection bietet Anwendungen einen sehr hohen Durchsatz, verursacht jedoch gelegentliche Pausen. Diese Pausen können wenige Millisekunden bis zu mehreren Sekunden dauern, je nachdem, wie groß der Freispeicher und das Garbagevolumen ist.

### Verringerung der Pausezeit

JVM verwendet zwei Verfahren zur Verringerung von Pausezeiten:

- Gleichzeitig ablaufende Garbage-Collection
- Garbage-Collection nach Objektalter

Die Befehlszeilenoption -Xgcpolicy:optavgpause fordert die Verwendung der gleichzeitig ablaufenden Garbage-Collection an, um die Pausezeit der Garbage-Collection (GC) erheblich zu verringern. Die gleichzeitig ablaufende GC verringert die Pausezeit, indem die Ausführung einiger GC-Aktivitäten zur gleichen Zeit wie die normale Programmausführung erfolgt. Dabei wird die durch die Erfassung des Freispeichers verursachte Unterbrechung minimiert. Die Option -Xgcpolicy:optavgpause begrenzt außerdem den Effekt eines höheren Freispeicherumfangs während der Garbage-Collection-Pause. Die Option -Xgcpolicy:optavgpause ist für Konfigurationen mit großen Freispeichern am nützlichsten. Die Verringerung der Pausezeit hat möglicherweise einen reduzierten Anwendungsdurchsatz zur Folge.

Während der gleichzeitig ablaufenden Garbage-Collection wird viel Zeit für die Identifizierung von Objekten mit einer relativ langen Lebensdauer verwendet, die nicht erfasst werden können. Wenn sich die GC nur auf Objekte konzentriert, die höchstwahrscheinlich wiederverwendbar sind, können Sie die Pausezeit für einige Anwendungen weiter verringern. Bei der GC nach Objektalter wird dies erreicht, indem der Freispeicher in zwei "Generationen" aufgeteilt wird, nämlich in die Bereiche "Junge Objekte" und "Alte Objekte". Die Objekte werden abhängig von ihrem Alter in einen dieser Bereiche gestellt. Der Bereich "Junge Objekte" ist der kleinere der beiden Bereiche und enthält jüngere Objekte. Der Bereich "Alte Objekte" ist größer und enthält ältere Objekte. Objekte werden zuerst dem Bereich "Junge Objekte" zugeordnet. Wenn sie lang genug überleben, werden Sie schließlich in den Bereich "Alte Objekte" umgestuft.

Die GC nach Objektalter basiert darauf, dass die meisten Objekte nur eine kurze Lebensdauer haben. Die GC nach Objektalter verringert Pausezeiten, indem sie sich auf das Zurückgewinnen von Speicher im Bereich "Junge Objekte" konzentriert, da dieser Bereich über den meisten wiederverwendbaren Speicherplatz verfügt. Im Gegensatz zu gelegentlichen aber übermäßig langen Pausezeiten beim Erfassen des gesamten Freispeichers wird der Bereich "Junge Objekte" regelmäßiger erfasst. Außerdem sind Pausezeiten verhältnismäßig kurz, wenn der Bereich klein genug ist. Die GC nach Objektalter hat jedoch den Nachteil, dass der Bereich "Alte Objekte" mit der Zeit voll wird, wenn zu viele Objekte eine zu lange Lebensdauer haben. Verwenden Sie eine Kombination aus der gleichzeitig ablaufenden GC und der GC nach Objektalter, um in dieser Situation die Pausezeit zu minimieren. Die Option -Xgcpolicy:gencon fordert die kombinierte Verwendung der gleichzeitig ablaufenden GC und der GC nach Objektalter an, um die GC-Pausezeit zu verringern.

### Umgebungen mit sehr vollen Freispeichern

Wenn der Java-Freispeicher nahezu voll ist und sehr wenig zurückzufordernder Garbagespeicher vorhanden ist, werden Anforderungen für neue Objekte möglicherweise nicht schnell beantwortet, da kein Speicherbereich sofort verfügbar ist. Bei der Ausführung mit nahezu vollem Freispeicher kann die Anwendungsleistung geringer werden, unabhängig davon, welche der oben genannten Optionen Sie verwenden. Wenn weiterhin Freispeicher angefordert wird, empfängt die Anwendung eine Ausnahmebedingung wegen ungenügender Speicherkapazität und JVM wird beendet, es sei denn, die Ausnahmebedingung wird abgefangen und bearbeitet. Zu diesem Zeitpunkt erstellt JVM eine Diagnosedatei mit dem Namen "javadump". In diesen Situationen sollten Sie entweder die Freispeichergröße mit der Option -Xmx erhöhen oder die Anzahl der verwendeten Anwendungsobjekte verringern. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.

## Signalverarbeitung durch JVM

Wenn ein für Java Virtual Machine (JVM) wichtiges Signal gesendet wird, wird eine Signalroutine aufgerufen. Diese Signalroutine legt fest, ob das Signal für einen Java- oder Nicht-Java-Thread aufgerufen wurde.

Wurde das Signal für einen Java-Thread aufgerufen, steuert JVM die Signalverarbeitung. Wenn eine Anwendungsroutine für dieses Signal installiert ist, und Sie die Befehlszeilenoption -Xnosigchain nicht angegeben haben, wird die Anwendungsroutine für dieses Signal aufgerufen, nachdem JVM die Verarbeitung abgeschlossen hat.

Wurde das Signal für einen Nicht-Java-Thread aufgerufen und wurde zuvor mit der Anwendung, mit der JVM installiert wurde, eine eigene Routine für das Signal installiert, übernimmt diese Signalroutine die Steuerung. Wenn das Signal jedoch von JVM oder der Java-Anwendung angefordert wird, wird es ignoriert, oder die Standardaktion wird ausgeführt.

Unter Windows gibt es eine Ausnahme für diese Regel: Für ein extern generiertes Signal (z. B. durch Drücken der Taste Strg-Untbr) wird zum Ausführen der Signalroutine ein neuer Thread erstellt. In diesem Fall führt die JVM-Signalroutine die Verarbeitung aus, und die Anwendungsroutine für dieses Signal wird installiert, wenn für dieses Signal eine Anwendungsroutine installiert ist und Sie die Befehlszeilenoption -Xnosigchain nicht angegeben haben.

JVM führt für Signale bei Ausnahmebedingungen und für Fehlersignale eine der folgenden Aktionen aus:

- Verarbeiten der Bedingung und Wiederherstellung
- Beginnen einer Sequenz für einen kontrollierten Systemabschluss. Dabei werden die folgenden Aktionen ausgeführt:
  1. Ausgeben eines Java-Speicherauszugs, um den JVM-Status am Fehlerpunkt zu beschreiben
  2. Aufrufen der Signalroutine Ihrer Anwendung für dieses Signal
  3. Aufrufen eines beliebigen durch die Anwendung installierten Abbruchhooks
  4. Ausführen der erforderlichen Bereinigung, damit ein ordnungsgemäßer Systemabschluss durchgeführt werden kann

Informationen zum Schreiben eines Startprogramms, das die oben aufgeführten Hooks angibt, finden Sie unter der folgenden Adresse: http://www-106.ibm.com/developerworks/java/library/i-signalhandling/. Dieser Abschnitt wurde für Java Version 1.3.1 geschrieben, gilt jedoch auch für spätere Versionen.

Bei Interruptsignalen beginnt JVM ebenfalls eine Sequenz für einen kontrollierten Systemabschluss, der jedoch in diesem Fall wie eine normale Beendigung behandelt wird. Hierbei führt JVM die folgenden Aktionen aus:

- Aufrufen der Signalroutine Ihrer Anwendung für dieses Signal
- Ausführen aller Hooks für das Beenden der Anwendung
- Aufrufen eines beliebigen durch die Anwendung installierten Exit-Hooks
- Ausführen der erforderlichen JVM-Bereinigung

Der Systemabschluss entspricht dem Systemabschluss, der über einen Aufruf der Java-Methode `System.exit()` eingeleitet wurde.

Weitere von JVM verwendete Signale werden für die interne Steuerung verwendet und führen nicht zur Beendigung von JVM. Das einzige wichtige Steuerungssignal ist SIGBREAK, durch das ein Java-Speicherauszug generiert wird.

### Von JVM verwendete Signale

In Tabelle 1 sind die von JVM verwendeten Signale aufgeführt. Die Signale werden in der Tabelle nach Typ oder Verwendung wie folgt zusammengefasst:

- Ausnahmebedingungen: Das Betriebssystem setzt beim Auftreten einer schwer wiegenden Bedingung ein entsprechendes Signal zum Anzeigen einer Ausnahmebedingung ab.
- Fehler: JVM setzt ein Signal SIGABRT ab, wenn es eine Bedingung feststellt, aus der keine Wiederherstellung möglich ist.
- Interrupts: Interruptsignale werden außerhalb eines JVM-Prozesses asynchron abgesetzt, um einen Systemabschluss anzufordern.
- Steuerzeichen: Hierbei handelt es sich um andere Signale, die von JVM zu Steuerungszwecken verwendet werden.

Tabelle 1. Von JVM verwendete Signale
Signalname | Signaltyp | Beschreibung | Inaktiviert durch -Xrs
--- | --- | --- | ---
SIGINT | Interrupt | Interaktiver Abruf (Strg-C). JVM wird normal beendet. | Ja
SIGTERM | Interrupt | Beendigungsanforderung. JVM wird normal beendet. | Ja
SIGBREAK | Steuerzeichen | Ein Unterbrechungssignal von einem Terminal. JVM verwendet dieses Signal zum Ausführen von Java-Speicherauszügen. | Ja

|IBM JVM verwendet eine strukturierte Ausnahmebedingungsbehandlung und die API SetConsoleCtrlHandler(). Diese werden mit -Xrs inaktiviert. -Xnosigchain wird unter Windows ingoriert.

Mit Hilfe der Option -Xrs (Reduzierung der Verwendung von Signalen) können Sie verhindern, dass JVM die meisten Signale verarbeitet. Weitere Informationen hierzu finden Sie auf der Sun-Website zum Startprogramm für Java-Anwendungen unter http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html.

Die Signale `2 (SIGINT)` und `15 (SIGTERM)` für JVM-Threads führen zur Beendigung von JVM. Daher sollte eine Anwendungssignalroutine bei diesen Signalen keine Wiederherstellung versuchen, es sei denn, JVM wird nicht mehr benötigt.

### Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek

Runtime Environment enthält eine Signalverkettungsfunktion. Die Signalverkettung ermöglicht eine effizientere Interaktion von JVM mit nativem Code, der eigene Signalroutinen installiert.

Mit der Signalverkettungsfunktion kann eine Anwendung mit der gemeinsam benutzten Bibliothek jsig.dll verbunden werden und diese vor msvcrt.dll laden. Mit Hilfe der Bibliothek jsig.dll wird sichergestellt, dass `signal()`-Aufrufe abgefangen werden, so dass die JVM-Signalroutinen nicht durch die zugehörigen Routinen ersetzt werden. Stattdessen werden die neuen Signalroutinen durch diese Aufrufe gesichert oder nach den durch JVM installierten Signalroutinen hinzugefügt. Wenn diese Signale zu einem späteren Zeit gesendet werden und nicht an JVM gerichtet sind, werden die vorinstallierten Signalroutinen aufgerufen.

Wenn Sie jsig.dll verwenden möchten, stellen Sie eine Verbindung von jsig.dll zu der Anwendung her, die JVM erstellt oder integriert.

## Umwandeln von XML-Dokumenten

In IBM SDK sind der XSLT4J-Prozessor und der XML4J-Parser enthalten, die der Spezifikation JAXP 1.3 entsprechen. Mit Hilfe dieser Tools können Sie XML-Dokumente unabhängig von einer bestimmten Implementierung zur XML-Verarbeitung syntaktisch analysieren und umwandeln. Mit der Funktion "Factory Finders" zum Suchen nach den Implementierungen SAXParserFactory, DocumentBuilderFactory und TransformerFactory kann Ihre Anwendung zwischen unterschiedlichen Implementierungen umschalten, ohne dass hierfür Code geändert werden muss.

|Die in IBM SDK enthaltene XML-Technologie ähnelt Apache Xerces Java und Apache Xalan Java. Weitere Informationen finden Sie unter http://xml.apache.org/xerces2-j/ und http://xml.apache.org/xalan-j/.

Der XSLT4J-Prozessor bietet Ihnen die Möglichkeit, zwischen dem ursprünglichen XSLT Interpretive-Prozessor und dem neuen XSLT Compiling-Prozessor zu wählen. Der Interpretive-Prozessor wurde speziell für Tools- und Debuggingumgebungen entwickelt. Er unterstützt die XSLT-Erweiterungsfunktionen, die vom XSLT Compiling-Prozessor nicht unterstützt werden. Der XSLT Compiling-Prozessor wurde dagegen für hochleistungsfähige Laufzeitumgebungen entwickelt. Er generiert aus einem XSL-Style-Sheet eine Umwandlungsroutine (oder Translet). Dadurch wird die Interpretation von Style-Sheet-Anweisungen von der zugehörigen ausführbaren Anwendung für XML-Daten getrennt.

Der XSLT Interpretive-Prozessor ist der Standardprozessor. Zur Auswahl des XSLT Compiling-Prozessors stehen folgende Möglichkeiten zur Verfügung:

- Ändern der Angaben in der Datei jaxp.properties (unter C:\Programme\IBM\Java50\jre\lib) oder
- Setzen des Systemmerkmals für den Schlüssel javax.xml.transform.TransformerFactory auf org.apache.xalan.xsltc.trax.TransformerFactoryImpl

Zur Implementierung von Merkmalen in der Datei jaxp.properties müssen Sie die Datei jaxp.properties.sample in die Datei jaxp.properties unter C:\Programme\IBM\Java50\ kopieren. Diese Datei enthält außerdem ausführliche Informationen zur Vorgehensweise bei der Ermittlung der Implementierungen, die für TransformerFactory, SAXParserFactory und DocumentBuilderFactory verwendet werden sollen.

Zur Verbesserung der Leistung bei der Umwandlung von StreamSource-Objekten mit dem XSLT Compiling-Prozessor müssen Sie die Klasse com.ibm.xslt4j.b2b2dtm.XSLTCB2BDTMManager als Provider des Services org.apache.xalan.xsltc.dom.XSLTCDTMManager angeben. Führen Sie zur Ermittlung des Service-Providers jeden der nachfolgend aufgeführten Schritte durch, bis org.apache.xalan.xsltc.dom.XSLTCDTMManager gefunden wird:

1. Überprüfen Sie die Einstellung für das Systemmerkmal org.apache.xalan.xsltc.dom.XSLTCDTMManager.
2. Überprüfen Sie den Wert für das Systemmerkmal org.apache.xalan.xsltc.dom.XSLTCDTMManager in der Datei C:\Programme\IBM\Java50\lib\xalan.properties.
3. Überprüfen Sie, ob in der Datei META-INF\services\org.apache.xalan.xsltc.dom.XSLTCDTMManager ein Klassenname aufgeführt ist.
4. Verwenden Sie den Standard-Service-Provider org.apache.xalan.xsltc.dom.XSLTCDTMManager.

Der XSLT Compiling-Prozessor erkennt den Service-Provider für den Service org.apache.xalan.xsltc.dom.XSLTCDTMManager beim Erstellen eines Objekts mit dem Namen javax.xml.transform.TransformerFactory. Alle Objekte mit dem Namen javax.xml.transform.Transformer oder javax.xml.transform.sax.TransformerHandler, die mit Hilfe dieses TransformerFactory-Objekts erstellt werden, verwenden denselben Service-Provider. Sie können Service-Provider nur ändern, indem Sie eine der oben aufgeführten Einstellungen ändern und anschließend ein neues TransformerFactory-Objekt erstellen.

### Verwenden einer älteren Version von Xerces oder Xalan

Wenn Sie mit einer älteren Version von Tomcat arbeiten, gilt möglicherweise die folgende Einschränkung.

Wenn Sie im Überschreibungsverzeichnis eine älteren Version von Xerces (vor Version 2.0) oder Xalan (vor Version 2.3) verwenden, wird beim Aufrufen der Anwendung möglicherweise eine Ausnahmebedingung für Nullzeiger angezeigt. Diese Ausnahmebedingung tritt auf, da bei älteren Versionen die Datei jaxp.properties nicht ordnungsgemäß verarbeitet werden kann.

Gehen Sie wie folgt vor, um diesen Fehler zu umgehen:

- Führen Sie ein Upgrade auf eine neuere Version der Anwendung aus, die die aktuelle JAXP-Spezifikation (Java API for XML Programming) implementiert (http://java.sun.com/xml/jaxp/index.html).

- Löschen Sie die Datei jaxp.properties aus dem Verzeichnis C:\Programme\IBM\Java50\jre\lib.

- Entfernen Sie die Kommentarzeichen in der Datei jaxp.properties in C:\Programme\IBM\Java50\jre\lib.

- Definieren Sie SAXParserFactory, DocumentBuilderFactory oder TransformerFactory explizit unter Verwendung der Umgebungsvariablen IBM_JAVA_OPTIONS. Beispiel:

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

  oder

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

  oder

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

- Legen Sie das Systemmerkmal für javax.xml.parsers.SAXParserFactory, javax.xml.parsers.DocumentBuilderFactory oder javax.xml.transform.TransformerFactory innerhalb des Anwendungscodes fest. Ein Beispiel hierzu finden Sie in der Spezifikation JAXP 1.3.

# Verwenden von SDK zur Entwicklung von Java-Anwendungen

In den folgenden Abschnitten erhalten Sie Informationen zur Verwendung von SDK for Windows zur Entwicklung von Java-Anwendungen. Einzelheiten zu den verfügbaren Tools finden Sie im Abschnitt SDK-Tools.

## Debugging in Java-Anwendungen

Zur Fehlerbehebung in Java-Programmen können Sie den Java-Debugger (JDB) oder andere Debugger verwenden, die über die JPDA (Java Platform Debugger Architecture) kommunizieren, die in SDK for Windows enthalten ist.

### Java-Debugger (JDB)

Der Java-Debugger (JDB) ist in SDK for Windows enthalten. Dieser Debugger wird über den Befehl jdb aufgerufen. Er wird JVM über die JPDA zugeordnet. Gehen Sie zur Fehlerbehebung in Java-Anwendungen wie folgt vor:

1. Starten Sie JVM unter Angabe folgender Optionen:

       java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<Port>
            MeineAnwendung <Argumente zu MeineAnwendung>

2. Daraufhin startet JVM. Vor dem Starten der Java-Anwendung wird die Ausführung jedoch ausgesetzt. Sie können den Debugger in einer separaten Sitzung über folgenden Befehl JVM zuordnen:

       jdb -attach <Portnummer>

   Der Debugger wird daraufhin JVM zugeordnet, und Sie können eine Reihe von Befehlen zur Überprüfung und Steuerung der Java-Anwendung ausführen. Mit dem Befehl `run` können Sie die Java-Anwendung beispielsweise ausführen.

Wenn Sie weitere Informationen zu JDB-Optionen aufrufen möchten, geben Sie Folgendes ein:

    jdb -help

Gehen Sie wie folgt vor, um weitere Informationen zu JDB-Befehlen anzuzeigen:

1. Geben Sie `jdb` ein.
2. Geben Sie bei der JDB-Eingabeaufforderung `help` ein.

Sie können JDB außerdem für die Fehlerbehebung in Java-Anwendungen auf fernen Maschinen verwenden. JPDA verwendet ein TCP/IP-Socket für die Verbindung mit der fernen JVM.

1. Starten Sie JVM wie oben beschrieben.
2. Ordnen Sie den Debugger mit folgendem Befehl dem fernen System zu:

       jdb -attach <Systemname oder IP-Adresse>:<Portnummer>

Wenn Sie eine Debugsitzung über das Transportprotokoll dt_socket aufrufen, müssen Sie sicherstellen, dass die angegebenen Ports verfügbar sind.

|Die JVMDI (Java Virtual Machine Debugging Interface) wird in diesem Release nicht unterstützt. Sie wurde durch die JVMTI (Java Virtual Machine Tool Interface) ersetzt.

Weitere Informationen zu JDB und JPDA sowie deren Verwendung finden Sie auf den folgenden Websites:

- 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

## Ermitteln, ob eine Anwendung auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt wird

Einige Java-Anwendungen müssen in der Lage sein zu ermitteln, ob sie auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt werden. Falls Ihre Anwendung beispielsweise über eine Bibliothek mit nativem Code verfügt, muss die Bibliothek für Plattformen, die sowohl den 32-Bit- als auch den 64-Bit-Betriebsmodus unterstützen, separat im 32-Bit- und im 64-Bit-Format kompiliert werden. In diesem Fall muss die Anwendung während der Laufzeit die richtige Bibliothek laden, da der 32-Bit- und der 64-Bit-Code nicht miteinander kombiniert werden können.

Mit Hilfe des Systemmerkmals com.ibm.vm.bitmode können Anwendungen den Modus ermitteln, in dem JVM ausgeführt wird. Es werden folgende Werte zurückgegeben:

- 32 - JVM wird im 32-Bit-Modus ausgeführt
- 64 - JVM wird im 64-Bit-Modus ausgeführt

Mit dem folgenden Aufruf können Sie das Systemmerkmal com.ibm.vm.bitmode innerhalb des Anwendungscodes überprüfen:

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

## Schreiben von JNI-Anwendungen

Gültige JNI-Versionsnummmern, die über native Programme im API-Aufruf JNI_CreateJavaVM() angegeben werden können, lauten wie folgt:

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

Über diese Versionsnummer wird lediglich die Version der zu verwendenden nativen JNI-Schnittstelle festgelegt. Die tatsächliche JVM-Version, die erstellt wird, wird über die J2SE-Bibliotheken angegeben (Version 5.0). Die JNI-Schnittstellen-API hat keine Auswirkungen auf die Sprachenspezifikation, die über JVM, die APIs der Klassenbibliothek oder einen anderen Bereich mit JVM-Funktionen implementiert wird. Weitere Informationen hierzu finden Sie unter http://java.sun.com/j2se/1.5.0/docs/guide/jni.

Falls für Ihre Anwendung zwei JNI-Bibliotheken erforderlich sind (für 32 und 64 Bit), verwenden Sie das Systemmerkmal com.ibm.vm.bitmode, um festzustellen, ob derzeit eine 32-Bit- oder 64-Bit-JVM ausgeführt wird, und wählen Sie dann die geeignete Bibliothek aus.

Anmerkung:
Version 1.1 der JNI (Java Native Interface) wird nicht unterstützt.

## Arbeiten mit Applets

Mit Applet Viewer können Sie mit Hilfe des Applet-Tags mindestens ein Applet ausführen, das durch Verweise auf einer Webseite (HTML-Datei) aufgerufen wird. Applet Viewer findet die APPLET-Tags in der HTML-Datei und führt die Applets, wie durch die Tags angegeben, in separaten Fenstern aus.

Da Applet Viewer für das Anzeigen von Applets konzipiert wurde, kann eine Webseite, die viele HTML-Tags enthält, mit Applet Viewer nicht vollständig angezeigt werden. Mit Applet Viewer kann lediglich eine syntaktische Analyse der APPLET-Tags und nicht der anderen auf der Webseite enthaltenen HTML-Tags durchgeführt werden.

### Ausführen von Applets mit Applet Viewer

Geben Sie zum Ausführen eines Applets mit Applet Viewer Folgendes an einer Eingabeaufforderung ein:

       appletviewer Name

Name steht für Folgendes:

- Dateiname einer HTML-Datei, die ein Applet aufruft
- URL einer Webseite, die ein Applet aufruft

Geben Sie z. B. zum Aufrufen von Applet Viewer über eine HTML-Datei, die ein Applet aufruft, an einer Eingabeaufforderung Folgendes ein:

    appletviewer <Demo>\GraphLayout\Beispiel1.html

<Demo> wird dabei durch den vollständigen Pfad des dekomprimierten Demopakets ersetzt.

Beispielsweise ist `http://java.sun.com/applets/NervousText/Beispiel1.html` die URL einer Webseite, die ein Applet aufruft. Geben Sie zum Aufrufen von Applet Viewer auf dieser Webseite an einer Shelleingabeaufforderung Folgendes ein:

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

Applet Viewer erkennt die Option charset des Tags <META> nicht. Wenn die Datei, die Applet Viewer lädt, nicht als Systemstandard codiert ist, wird möglicherweise eine E/A-Ausnahmebedingung angezeigt. Verwenden Sie beim Ausführen des Befehls `appletviewer` die Option -encoding, um die Ausnahmebedingung zu vermeiden. Beispiel:

    appletviewer -encoding JISAutoDetect Beispiel.html

### Debugging von Applets mit Applet Viewer

Mit Hilfe der Option -debug von Applet Viewer können Sie Fehler in Applets beheben. Beim Debugging von Applets wird empfohlen, Applet Viewer über das Verzeichnis aufzurufen, in dem die HTML-Datei enthalten ist, die das Applet aufruft. Beispiel:

    cd <Demo>\TicTacToe
    appletviewer -debug Beispiel1.html

<Demo> wird dabei durch den vollständigen Pfad des dekomprimierten Demopakets ersetzt.

Dokumentation zum Debugging von Applets finden Sie mit Hilfe des Applet Viewer auf der Website von Sun: http://java.sun.com.

| | |

## Konfigurieren einer Speicherzuordnung von großen Seiten

|

Sie können die Unterstützung für große Seiten auf Systemen aktivieren, die dies unterstützen. |Starten Sie dazu Java unter Angabe der Option -Xlp.

|

Große Seiten werden in erster Linie verwendet, um |Leistungssteigerungen in Anwendungen zu erzielen, die große |Speichermengen zuordnen und häufig auf diesen Speicher zugreifen. |Die Leistungssteigerungen durch die Verwendung großer Seiten werden |hauptsächlich durch die geringe Anzahl Fehlschläge im Translation |Lookaside Buffer (TLB) erzielt. Der TLB ordnet einen größeren Bereich an virtuellem Speicher zu, |und daraus ergeben sich die Leistungssteigerungen.

|

Damit JVM große Seiten verwendet, muss auf Ihrem System eine ausreichende Anzahl zusammenhängender großer Seiten verfügbar sein. Sollte es nicht möglich sein, große Seiten zuzuordnen, selbst wenn genügend Seiten |verfügbar sind, hängen die großen Seiten möglicherweise nicht zusammen.

|

Die Zuordnung großer Seiten ist nur möglich, wenn die lokale Administrationsrichtlinie für den JVM-Benutzer so konfiguriert ist, dass "Lock pages in memory" (Seiten im Speicher sperren) zulässig ist.

## CORBA-Unterstützung

Java 2 Platform, Standard Edition (J2SE) unterstützt mindestens die Spezifikationen, die in den offiziellen Spezifikationen für die CORBA-Unterstützung in J2SE (V1.5) enthalten sind. In einigen Fällen unterstützt IBM J2SE ORB neuere Versionen der Spezifikationen.

### Unterstützung für GIOP 1.2

Wie in Kapitel 13 und 15 der Spezifikation CORBA 2.3.1 (OMG-Dokument formal/99-10-07) beschrieben, unterstützt SDK alle GIOP-Versionen. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?formal/99-10-07

Bidirektionales GIOP wird nicht unterstützt.

### Unterstützung für portierbare Abfangprozesse

Wie von der OMG (Object Management Group) im Dokument ptc/01-03-04 beschrieben, unterstützt SDK portierbare Abfangprozesse. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?ptc/01-03-04

Portierbare Abfangprozesse sind Hooks in den ORB (Object Request Broker), über die ORB-Services den normalen Ausführungsablauf des ORBs unterbrechen können.

### Unterstützung für den Interoperable Naming Service

Wie von der OMG im Dokument ptc/00-08-07 beschrieben, unterstützt SDK den Interoperable Naming Service. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?ptc/00-08-07

Der Standardport, der vom Transient Name Server (Befehl `tnameserv`) verwendet wird, wenn der Parameter ORBInitialPort nicht angegeben ist, wurde von 900 in 2809 geändert. Dies ist die Portnummer, die zusammen mit der IANA (Internet Assigned Number Authority) für einen CORBA Naming Service registriert wird. Programme, die von dieser Standardeinstellung abhängig sind, müssen möglicherweise aktualisiert werden, um mit dieser Version arbeiten zu können.

Der Ausgangskontext, der vom Transient Name Server zurückgegeben wird, lautet jetzt `org.omg.CosNaming.NamingContextExt`. Bereits vorhandene Programme, die den Verweis auf den Kontext `org.omg.CosNaming.NamingContext` eingrenzen, funktionieren weiterhin und müssen nicht erneut kompiliert werden.

Der ORB unterstützt die über die Interoperable Naming Service-Spezifikation definierten Parameter -ORBInitRef und -ORBDefaultInitRef, und die Operation ORB::string_to_object unterstützt jetzt die über die Interoperable Naming Service-Spezifikation definierten Formate für ObjectURL-Zeichenfolgen (corbaloc: und corbaname:).

Die OMG gibt die Methode ORB::register_initial_reference an, um einen Service mit dem Interoperable Naming Service zu registrieren. Diese Methode ist jedoch in der Sun Java Core-API der Version 5.0 nicht verfügbar. Programme, die in der aktuellen Version einen Service registrieren müssen, müssen diese Methode in der internen IBM ORB-Implementierungsklasse aufrufen. Dies gilt beispielsweise beim Registrieren des Services "MeinService":

    ((com.ibm.CORBA.iiop.ORB)orb).register_initial_reference("MeinService",
    serviceRef);

Dabei ist `orb` eine Instanz von `org.omg.CORBA.ORB`, die von `ORB.init()` zurückgegeben wird, und `serviceRef` ein CORBA-Objekt, das mit dem ORB verbunden ist. Dies ist ein vorläufiger Mechanismus, der mit zukünftigen Versionen nicht kompatibel ist und nicht auf ORBs anderer Hersteller portiert werden kann.

### Systemmerkmale für die ORB-Tracefunktion

Durch eine Laufzeitfunktion zur Fehlerbehebung wird die Servicefreundlichkeit verbessert. Diese Funktion kann für die Problemdiagnose verwendet werden, oder sie wird vom IBM Kundendienst benötigt. Die Tracefunktion wird von drei Systemmerkmalen gesteuert.

- Legen Sie Folgendes fest, um die Tracefunktion zu aktivieren: `com.ibm.CORBA.Debug=true`.
- Legen Sie Folgendes fest, um gesendete und empfangene GIOP-Nachrichten zu formatieren und dem Trace hinzuzufügen: `com.ibm.CORBA.CommTrace=true`. Standardmäßig wird die Ausgabe der ORB-Tracefunktion in Dateien geschrieben, deren Namen das folgende Format aufweisen: orbtrc.DDMMYYYY.HHmm.SS.txt.
- Legen Sie Folgendes fest, um die Ausgabe in eine andere Datei zu schreiben: `com.ibm.CORBA.Debug.Output=<Dateiname>`.

Geben Sie z. B. Folgendes ein, um ein Trace für Ereignisse und formatierte GIOP-Nachrichten durchzuführen:

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

Aktivieren Sie die Tracefunktion nicht für normale Operationen, da dies zu Leistungseinbußen führen kann. Obwohl Sie die Tracefunktion inaktiviert haben, funktioniert FFDC (First Failure Data Capture) weiterhin, so dass nur schwer wiegende Fehler dokumentiert werden. Wenn eine Debugausgabedatei generiert wird, prüfen Sie sie in Bezug auf dieses Problem. Z. B. hat der Server möglicherweise seinen Betrieb eingestellt, ohne dass ORB.shutdown() ausgeführt wurde.

Der Inhalt und das Format der Traceausgabe können von Version zu Version variieren.

### Systemmerkmale zur Optimierung des ORB

Mit den folgenden Merkmalen können Sie den ORB optimieren:

- Legen Sie das Systemmerkmal com.ibm.CORBA.FragmentSize fest, um die Fragmentierung von GIOP 1.2 zu steuern.

  Geben Sie Folgendes ein, um für die Fragmentgröße 4096 Byte festzulegen:

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

  Die Standardeinstellung lautet 1024 Byte. Sie können die Fragmentierung inaktivieren, wenn Sie die Fragmentgröße auf 0 setzen.

- In einem heterogenen Netz kann sich die Antwort auf eine CORBA-Anforderung verzögern oder verloren gehen. Über das Systemmerkmal com.ibm.CORBA.RequestTimeout können Sie die maximale Wartezeit festlegen. Sie können das Zeitlimit für die Anforderungssuche auch über com.ibm.CORBA.LocateRequestTimeout steuern. Geben Sie z. B. Folgendes ein, um beide Verzögerungen auf 30 Sekunden zu beschränken:

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

  Standardmäßig wartet der ORB uneingeschränkt lange auf eine Antwort. Legen Sie für das Zeitlimit keinen zu niedrigen Wert fest, um zu vermeiden, dass Verbindungen unnötigerweise beendet werden.

- Wenn Ihr Programm einen Service im Netz bereitstellt, müssen Sie für die Anzahl Ports, über die der ORB eingehende Anforderungen liest, möglicherweise einen bekannten Wert festlegen. Sie können dies über das Systemmerkmal com.ibm.CORBA.ListenerPort steuern.

  Geben Sie z. B. Folgendes ein, damit der ORB Port 1050 verwendet:

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

  Wenn für dieses Merkmal ein Wert festgelegt wurde, ist der ORB empfangsbereit, sobald er initialisiert wurde. Andernfalls ist er nur empfangsbereit, wenn es erforderlich ist.

### Java 2-Sicherheitsberechtigungen für den ORB

Bei der Ausführung eines Java 2-Sicherheitsmanagers kann das Aufrufen einiger Methoden in den CORBA-API-Klassen Berechtigungsprüfungen verursachen, die wiederum zu einer Ausnahmebedingung `SecurityException` führen. Zu den hiervon betroffenen Methoden gehören:

Tabelle 2. Methoden, auf die sich das Ausführen eines Java 2-Sicherheitsmanagers auswirkt
Klasse/Schnittstelle | Methode | Erforderliche Berechtigung
--- | --- | ---
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

Falls Ihr Programm eine der aufgeführten Methoden verwendet, müssen Sie sicherstellen, dass die erforderlichen Berechtigungen vorliegen.

### ORB-Implementierungsklassen

Die ORB-Implementierungsklassen in diesem Release lauten:

- 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

Hierbei handelt es sich um die Standardwerte. Es wird jedoch empfohlen, diese Merkmale nicht direkt festzulegen bzw. nicht direkt auf die Implementierungsklassen zu verweisen. Aus Gründen der Portierbarkeit sollte ausschließlich auf die CORBA-API-Klassen und nicht auf die Implementierungsklassen verwiesen werden. Diese Werte werden in zukünftigen Releases möglicherweise geändert.

## RMI-IIOP

Java Remote Method Invocation (RMI) bietet ein einfaches Verfahren für die verteilte Java-Programmierung. RMI-IIOP (RMI over IIOP) arbeitet auf der Grundlage des Standard-IIOP-Protokolls (IIOP - Internet Inter-ORB Protocol) der CORBA (Common Object Request Broker Architecture) und ermöglicht so Erweiterungen der Java-RMI bei Datenübertragungen. Dadurch sind direkte Interaktionen mit beliebigen anderen CORBA-Object-Request-Brokern (ORBs) möglich, unabhängig davon, ob diese in Java oder einer anderen Programmiersprache implementiert wurden.

Folgende Dokumentation steht zur Verfügung:

- Im Handbuch RMI-IIOP Programmer's Guide ist eine Einführung zum Schreiben von RMI-IIOP-Programmen enthalten. Dieses Handbuch wird bei der Installation dieser Dokumentation installiert.
- Das Demoverzeichnis umfasst Folgendes:
  - Ein Beispiel mit der Bezeichnung "Hello World", mit dem zwischen dem Java Remote Method Protocol (JRMP) und IIOP-Protokollen umgeschaltet werden kann (demo\rmi-iiop\hello)
  - Ein Beispiel mit der Bezeichnung "Hello World", das mit einem IDL-Standardprogramm interagiert (demo\rmi-iiop\idl)
- Das Dokument Java Language to IDL Mapping enthält detaillierte technische Spezifikationen zu RMI-IIOP und ist unter folgender Adresse verfügbar:
  http://www.omg.org/cgi-bin/doc?ptc/00-01-06.pdf

## Implementieren des Steuerroutinenpools für RMI-Verbindungen

Thread-Pooling für Steuerroutinen von RMI-Verbindungen wird nicht standardmäßig aktiviert.

Wenn Sie das Verbindungspooling aktivieren wollen, das in der RMI-TCPTransport-Ebene implementiert ist, legen Sie die folgende Option fest:

    -Dsun.rmi.transport.tcp.connectionPool=true (oder einen Wert ungleich null)

Diese Runtime Environment-Version verfügt über keine Einstellungen, die Sie verwenden können, um die Anzahl Threads im Verbindungspool zu begrenzen.

Weitere Informationen finden Sie auf der Java-Website von Sun: http://java.sun.com.

## Erweiterte BiDirectional-Unterstützung

IBM SDK umfasst erweiterte BiDirectional-Unterstützung. Weitere Informationen erhalten Sie unter http://www-106.ibm.com/developerworks/java/jdk/bidirectional/index.html. Die Javadoc-Komponente für das BiDirectional-Paket wird mit SDK in der Datei docs/apidoc.zip mitgeliefert.

## Funktionale Erweiterungen für BigDecimal

| |

Über Java 5.0 wurde die IBM BigDecimal-Klasse von Sun als java.math.BigDecimal übernommen. com.ibm.math.BigDecimal wird von IBM nicht mehr gepflegt und ist daher veraltet. Es wird empfohlen, für die Verwendung von java.math.BigDecimal bereits vorhandenen Java-Code zu migrieren.

|

Die neue Klasse java.math.BigDecimal verwendet dieselben Methoden wie die Vorversion |und wie com.ibm.math.BigDecimal. Der bereits vorhandene Code, der java.math.BigDecimal verwendet, funktioniert weiterhin ordnungsgemäß.

|

Wenn Sie bereits vorhandenen Java-Code migrieren wollen, um die Klasse java.math.BigDecimal zu verwenden, ändern Sie die Importanweisung am Anfang Ihrer Java-Datei von `import com.ibm.math.*;` in `import java.math,*;`.

## Unterstützung des Euro-Symbols

Für IBM SDK und Runtime Environment gilt ab dem 1. Januar 2002 für die Länder der Europäischen Währungsunion der Euro als Standardwährung.

Wenn Sie die frühere nationale Währung verwenden möchten, geben Sie in der Java-Befehlszeile `-Duser.variant=PREEURO` an.

Wenn Sie mit der britischen, dänischen oder schwedischen Ländereinstellung arbeiten und den Euro als Währung verwenden möchten, geben Sie in der Java-Befehlszeile `-Duser.variant=EURO` an.

# Verwenden der Java Communications API (JavaComm)

Das Paket mit der Java Communications API (JavaComm) ist ein optional erhältliches Paket, das zusammen mit Runtime Environment for Windows eingesetzt werden kann. JavaComm kann unabhängig von SDK oder Runtime Environment installiert werden.

Mit Hilfe der JavaComm API sind Java-Anwendungen in der Lage, Übertragungen über den seriellen Anschluss und den Parallelanschluss für Technologien, wie z. B. Voicemail, Fax und Smartcards, unabhängig von der jeweiligen Plattform durchzuführen. Nach dem Schreiben von Übertragungen über den seriellen Anschluss oder den Parallelanschluss für Ihre Anwendung können Sie die entsprechenden Dateien in Ihre Anwendung aufnehmen.

Die Java Communications API unterstützt serielle EIA-232-Anschlüsse (EIA - Electronic Industries Association) bzw. RS232-Anschlüsse sowie IEEE 1284-Parallelanschlüsse (IEEE - Institute of Electrical and Electronics Engineers). Sie wird auf Systemen mit IBM Runtime Environment Version 5.0 unterstützt.

Bei Verwendung der Java Communications API haben Sie folgende Möglichkeiten:

- Auflisten von Anschlüssen auf einem System
- Öffnen und Anfordern des Eigentumsrechts von Anschlüssen
- Beheben von Konkurrenzsituationen in Bezug auf das Eigentumsrecht für Anschlüsse zwischen Anwendungen, die mit der Java Communications API arbeiten
- Überwachen asynchroner und synchroner E/A-Anschlüsse mit Hilfe von Ereignisbenachrichtigungen
- Empfangen von Bean-ähnlichen Ereignissen, die Statusänderungen am Anschluss angeben

## Installieren der Java Communications API

Sie sollten vor der Installation der Java Communications API sicherstellen, dass eine Kopie von SDK oder Runtime Environment installiert ist.

Gehen Sie zur Installation der Java Communications API über eine Datei mit der Erweiterung zip folgendermaßen vor:

1. Stellen Sie die ZIP-Datei der Java Communications API, ibm-java2-javacomm-50-win-i386.zip, in das Verzeichnis, in dem SDK oder Runtime Environment installiert wurde. Falls Sie bei der Installation das Standardverzeichnis verwendet haben, handelt es sich hierbei um C:\Programme\IBM\Java50\.
2. Dekomprimieren Sie die Datei. Es werden folgende Dateien in die entsprechenden Verzeichnisse extrahiert:
   - jre\lib\ext\comm.jar
   - jre\bin\ibmcomm.dll
   - jre\lib\javax.comm.properties
   - docs\javacomm\License.html

   Falls Sie bei der Installation von Runtime Environment das Standardverzeichnis übernommen haben, befindet sich die Datei comm.jar im Verzeichnis C:\Programme\IBM\Java50\jre\lib\ext.

   Wenn Sie die Datei in einem anderen Verzeichnis dekomprimieren, werden die Dateien in dieselbe Verzeichnisstruktur gestellt, an Stelle von C:\Programme\IBM\Java50\ wird jedoch das Verzeichnis verwendet, in dem Sie die Datei dekomprimiert haben.

## Konfigurieren der Java Communications API

Nach der Installation der Java Communications API müssen Sie folgende Schritte durchführen:

- Ändern Sie den Zugriffsmodus für den seriellen Anschluss und den Parallelanschluss.
- Legen Sie einen Wert für die Umgebungsvariable PATH fest, falls dies nicht während der Installation von Java geschehen ist. Siehe hierzu den Abschnitt Festlegen der Umgebungsvariablen PATH.

## Einschränkung beim Drucken mit der Java Communications API

Bei Druckvorgängen über die Java Communications API müssen Sie auf dem Drucker möglicherweise die Tasten für Seitenvorschub oder Weiter oder eine ähnliche Funktion drücken.

## Deinstallieren der Java Communications API

Löschen Sie zum Deinstallieren der Java Communications API die folgenden Dateien aus dem Verzeichnis, in dem Sie Runtime Environment installiert haben:

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

Runtime Environment ist standardmäßig im Verzeichnis C:\Programme\IBM\Java50\ installiert.

## Dokumentation zur Java Communications API

Dokumentation zu APIs und Beispiele zur Java Communications API finden Sie auf der Sun-Website unter folgender Adresse: http://java.sun.com

# Implementieren von Java-Anwendungen

## Verwenden des Java-Plug-ins

Bei dem Java-Plug-in handelt es sich um ein Web-Browser-Plug-in. Durch Verwendung des Java-Plug-ins können Sie die Standard-JVM Ihres Web-Browsers umgehen und zum Ausführen von Applets oder Beans im Browser die gewünschte Laufzeitumgebung verwenden.

Sie müssen warten, bis die Applets vollständig geladen wurden, um zu vermeiden, dass sich der Browser "aufhängt". Wenn Sie beispielsweise die Knöpfe Zurück und Weiter verwenden, während ein Applet geladen wird, können die HTML-Seiten unter Umständen nicht geladen werden.

Das Java-Plug-in ist auf der Website von Sun unter http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/ dokumentiert.

### Unterstützte Browser

|

|Tabelle 3. Vom Java-Plug-in unterstützte Browser
|Betriebssystem | |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

|

Internet Explorer 5.01, der Standardbrowser unter Windows |2000, wird nicht unterstützt.

### Allgemeine Dokumentobjektmodellunterstützung (Document Object Model, DOM)

Auf Grund von Einschränkungen bei bestimmten Browsern können Sie möglicherweise nicht alle Funktionen des Pakets org.w3c.dom.html implementieren.

- Für einige dieser Funktionen wird eine Ausnahmebedingung sun.plugin.dom.exception.NotSupportedException ausgegeben.
- Wenn der Browser eine bestimmte Funktion nicht unterstützt, wird eine Ausnahmebedingung sun.plugin.dom.exception.InvalidStateException ausgegeben.

### Verwenden von DBCS-Parametern

Das Java-Plug-in unterstützt Doppelbytezeichen (z. B. Traditionelles Chinesisch BIG-5, Koreanisch, Japanisch) als Parameter für die Tags `<APPLET>`,`<OBJECT>` und `<EMBED>`. Sie müssen die richtige Zeichencodierung für das HTML-Dokument auswählen, damit das Java-Plug-in den Parameter syntaktisch analysieren kann. Geben Sie die Zeichencodierung für das HTML-Dokument mit Hilfe des Tags `<META>` im Abschnitt `<HEAD>` wie folgt an:

    <meta http-equiv="Content-Type" content="text/html; charset=big5">

In diesem Beispiel wird dem Browser mitgeteilt, dass er die HTML-Datei mit Hilfe der Zeichencodierung für Chinesisch BIG-5 syntaktisch analysieren soll. Alle Parameter werden ordnungsgemäß an das Java-Plug-in weitergeleitet. Einige der älteren Browserversionen erkennen diesen Tag möglicherweise nicht richtig. In diesem Fall können Sie erzwingen, dass der Browser diesen Tag ignoriert. Sie müssen die Codierung jedoch möglicherweise manuell ändern.

Sie können angeben, welche Codierung Sie verwenden möchten, um die HTML-Datei syntaktisch zu analysieren:

- Internet Explorer 5/6 Ansicht -> Codierung
- Netscape 4: Ansicht -> Zeichensatz
- Netscape 6: Anzeigen -> Zeichencodierung

## Verwenden von Java Web Start

Mit Hilfe von Java Web Start können Sie Java-Anwendungen implementieren. Web Start bietet dem Benutzer die Möglichkeit, Anwendungen direkt über das Internet aufzurufen und zu verwalten. Über Java Web Start können Sie Anwendungen auf einfache Weise über das Internet starten. Dabei haben Sie die Gewissheit, dass Sie mit der neuesten Version arbeiten. Installations- oder Upgradeprozeduren sind daher nicht mehr erforderlich. Bei der Arbeit mit Java Web Start muss keine Software heruntergeladen und installiert werden, so dass komplexe Installationsoptionen umgangen werden.

|Neben den unter http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources dokumentierten Argumenten des Attributs java-vm-args unterstützt Web Start -Xgcpolicy zum Festlegen der Garbage-Collection-Richtlinie.

Weitere Informationen zu Browsern, die Web Start unterstützen, finden Sie im Abschnitt Unterstützte Browser.

Weitere Informationen zu Web Start finden Sie unter http://java.sun.com/products/javawebstart und http://java.sun.com/j2se/1.5.0/docs/guide/javaws/index.html. Weitere Informationen zur Implementierung von Anwendungen finden Sie unter http://java.sun.com/j2se/1.5.0/docs/guide/deployment/index.html.

### Ausführen von Java Web Start

Sie können Web Start auf drei Arten aufrufen:

1. Wählen Sie auf einer Webseite einen Link aus, der auf eine JNLP-Datei verweist.
2. Geben Sie an einer Eingabeaufforderung den Befehl `javaws <URL>` ein, wobei `<URL>` die Speicherposition einer JNLP-Datei ist.
3. |Falls Sie Java Web Start bereits zum Öffnen der Anwendung verwendet haben, führen Sie javaws im Verzeichnis JRE\bin aus, um Java Application Cache Viewer zu starten.

Sobald eine Anwendung heruntergeladen wurde, wird sie im Cache der Java-Anwendung zwischengespeichert. Wenn erneut auf die Anwendung zugegriffen wird, lädt Java Web Start eine neuere Version der Anwendung herunter, sofern diese verfügbar ist. Andernfalls wird die im Cache vorhandene Version verwendet.

Beim Auftreten eines Fehlers in einer JNLP-Datei (z. B. ein ungültiger Befehlsname) schlägt Web Start fehl, ohne dass eine Fehlernachricht angezeigt wird.

## Ausliefern von Java-Anwendungen

Bei einer Java-Anwendung kann im Gegensatz zu einem Java-Applet kein Web-Browser für Installations- und Laufzeitservices verwendet werden. Bei der Auslieferung einer Java-Anwendung kann im Softwarepaket beispielsweise Folgendes enthalten sein:

- Ihre eigenen Klassen-, Ressourcen- und Datendateien
- Ein Installationsverfahren oder Installationsprogramm

Zum Ausführen der Anwendung benötigt der Benutzer Runtime Environment for Windows. In SDK for Windows ist Runtime Environment enthalten. Sie können jedoch nicht davon ausgehen, dass SDK for Windows auf den Systemen aller Benutzer installiert ist.

Die Lizenz für SDK for Windows berechtigt nicht dazu, Dateien aus SDK zusammen mit der Anwendung weiter zu verteilen. Sie müssen sicherstellen, dass auf dem Zielsystem eine lizenzierte Version von SDK for Windows installiert ist.

| | |

# Gemeinsame Nutzung von Klassendaten auf verschiedenen JVMs

|

IBM Virtual Machine (VM) ermöglicht die gemeinsame Nutzung von Boot- und Anwendungsklassen auf verschiedenen VMs, indem diese als gemeinsam genutzter Speicher in einen Cache gestellt werden. Durch die gemeinsame Nutzung von Klassen verringert sich die gesamte virtuelle Speicherbelegung, wenn mehrere VMs einen Cache gemeinsam nutzen. Außerdem verkürzt sich hierdurch der Systemstart von VM, nachdem der Cache erstellt wurde. Der Cache für gemeinsam genutzte Klassen ist unabhängig von den aktiven VMs und besteht über die Laufzeit der VM hinaus, über die der Cache gestartet wurde.

| |

## Übersicht über die gemeinsame Nutzung von Klassen

|

Mit IBM SDK können Sie so viele Klassen wie möglich gemeinsam nutzen. Dieser Vorgang läuft für den Benutzer transparent ab.

| |

### Cache-Inhalte

|

Der Cache für gemeinsam genutzte Klassen enthält |schreibgeschützte statische Klassendaten und Metadaten, die die |Klassen beschreiben. Alle VMs können die Daten im Cache lesen oder |aktualisieren. VMs, die den Cache gemeinsam nutzen, müssen |dieselbe Version aufweisen. Bei der Bearbeitung von Laufzeitbytecodes müssen Sie sorgfältig vorgehen. (Siehe |hierzu die Informationen im Abschnitt Änderungen bei Laufzeitbytecodes.)

| |

### Dynamisches Aktualisieren des Caches

|

Da der Cache für gemeinsam genutzte Klassen über die |Laufzeit von VMs hinaus besteht, wird er dynamisch |aktualisiert, um alle Änderungen wiederzugeben, die |möglicherweise an JARs oder Klassen auf dem Dateisystem |vorgenommen wurden. Durch die dynamische Aktualisierung |erscheint der Cache für die Anwendung transparent, die den Cache |nutzt.

| |

### Aktivieren der gemeinsamen Nutzung von Klassen

|

Sie können die gemeinsame Nutzung von Klassen mit Hilfe der |Option -Xshareclasses beim Starten von VM |aktivieren. VM stellt dadurch eine Verbindung zu einem |vorhandenen Cache her oder erstellt einen neuen Cache, falls noch |keiner vorhanden ist. Alle über VM geladenen Boot- und Anwendungsklassen werden standardmäßig gemeinsam genutzt. Benutzerdefinierte Klassenladeprogramme nutzen den Cache automatisch gemeinsam, wenn sie das Klassenladeprogramm der Anwendung erweitern. Sie müssen die zusammen mit VM verfügbare Java Helper API verwenden, um auf den Cache zugreifen zu können. (Siehe hierzu die Informationen im Abschnitt Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen.)

| |

### Cache-Sicherheit

|

Der Zugriff auf den Cache für gemeinsam genutzte Klassen wird durch Berechtigungen des Betriebssystems und Java-Sicherheitsberechtigungen begrenzt. Nur ein Klassenladeprogramm, in dem die gemeinsame Nutzung von Klassen registriert ist, kann Klassen zum Cache für gemeinsam genutzte Klassen hinzufügen. Wenn ein Java-Sicherheitsmanager installiert ist, muss Klassenladeprogrammen, mit Ausnahme von Klassenladeprogrammen des Standardbootprogramms, von Anwendungen und Erweiterungen, die Berechtigung zur gemeinsamen Nutzung von Klassen erteilt werden, indem der Datei java.policy die Klasse SharedClassPermission hinzugefügt wird. (Siehe |hierzu die Informationen im Abschnitt Verwenden von SharedClassPermission.) |Die Laufzeitberechtigung "createClassLoader" beschränkt die Erstellung neuer Klassenladeprogramme und daher auch den Zugriff auf den Cache.

| |

### Lebensdauer des Caches

|

Auf einem System können mehrere Caches vorhanden sein. Sie |werden nach Namen als Unteroption des Befehls |-Xshareclasses angegeben. VM kann nur mit jeweils einem Cache verbunden werden. Die Cachegröße wird beim |Systemstart über den Befehl -Xscmx<n>[k|m|g] |angegeben, und die Größe ist dann für die gesamte Lebensdauer des |Caches festgelegt. Caches bestehen solange, bis sie |explizit über eine Unteroption des Befehls |-Xshareclasses gelöscht werden oder das System erneut gestartet wird.

| |

### Cache-Dienstprogramme

|

Alle Cache-Dienstprogramme sind Unteroptionen des |Befehls -Xshareclasses. Mit |-Xshareclasses:help können Sie eine Liste der |verfügbaren Unteroptionen anzeigen.

| |

## Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen

|

Die gemeinsame Nutzung von Klassen wird mit Hilfe der Befehlszeilenoptionen -Xshareclasses und -Xscmx aktiviert und konfiguriert.

|

|
- -Xscmx<Größe>[k|m|g] |
  |
  - Gibt die Cachegröße an. Diese Option wird nur angewendet, wenn ein Cache erstellt wird und noch kein Cache mit demselben Namen vorhanden ist. Die Standardcachegröße hängt von der |jeweiligen Plattform ab. |Den verwendeten Größenwert können Sie durch Hinzufügen von -verbose:sizes als Befehlszeilenargument ermitteln. Der Cache ist mindestens 4 KB groß. Die maximale Größe des |Caches hängt ebenfalls von der Plattform ab. (Siehe hierzu die |Informationen im Abschnitt Grenzwerte für die Cachegröße.)
|
- -Xshareclasses:<Unteroption1>[,<Unteroption2>...] |
  |
  - Aktiviert die gemeinsame Nutzung von Klassen. Hierfür liegt |eine Reihe von Unteroptionen vor, bei denen es sich bei einigen um |Cache-Dienstprogramme handelt. Cache-Dienstprogramme führen den erforderlichen Vorgang für den angegebenen Cache durch, ohne VM zu starten. Sie können mehrere Unteroptionen miteinander |kombinieren, wobei diese durch Kommas voneinander getrennt sein |müssen. Die Cache-Dienstprogramme schließen sich allerdings |gegenseitig aus.
  Zusammen mit der Option -Xshareclasses können Sie folgende Unteroptionen verwenden, z. B. |-Xshareclasses:help. |
  |
  - help |
    |
    - Listet alle Befehlszeilenoptionen auf.
  |
  - name=<Name> |
    |
    - Stellt die Verbindung zu einem Cache mit einem bestimmten |Namen her und erstellt den Cache, falls er nicht bereits |vorhanden ist. Mit der Dienstprogrammoption listAllCaches |kann angezeigt werden, welche Caches derzeit verfügbar sind. Wenn Sie keinen Namen angeben, wird als Cachename der Standardname |"sharedcc_" verwendet, an den der aktuelle Benutzername angehängt wird.
  |
  - verbose |
    |
    - Mit dieser Option kann eine ausführliche Ausgabe zu E/A-Aktivitäten im Cache angezeigt werden. Dabei werden Informationen zu Klassen aufgelistet, |die gespeichert und gefunden wurden. Für jedes |Klassenladeprogramm wird eine eindeutige ID vergeben (das |Bootladeprogramm hat immer die ID 0), und in der Ausgabe ist |die Funktionsweise der Hierarchie von Klassenladeprogrammen dargestellt. |Die Klassenladeprogramme müssen bei den zugehörigen |übergeordneten Programmen eine Klasse anfordern, bevor sie diese selbst |laden können. Es ist normal, dass zahlreiche fehlgeschlagene Anforderungen angezeigt werden. Dieses Verhalten wird in der Hierarchie von Klassenladeprogrammen erwartet. Beachten Sie, dass mit der Standardoption -verbose:class auch die |ausführliche Ausgabe für die gemeinsame Klassennutzung aktiviert wird, falls die gemeinsame Nutzung von Klassen aktiviert ist.
  |
  - modified=<Geänderter Inhalt> |
    |
    - Diese Option muss angegeben werden, wenn ein Bytecode-Agent |installiert wurde, der möglicherweise den Bytecode während der Laufzeit |ändert. Wenn Sie diese Option nicht angeben und ein Bytecode-Agent |installiert ist, werden im Cache keine Klassen gespeichert oder |gefunden. Bei der Angabe <Geänderter Inhalt> handelt es sich um einen vom Benutzer |ausgewählten Deskriptor, z. B. "MeineÄnderungen1". Hiermit wird der Cache so partitioniert, dass nur JVMs, die den |Kontext "MeineÄnderungen1" verwenden, dieselben Klassen gemeinsam |nutzen können. Wenn Sie z. B. "HelloWorld" zusammen mit einem |Änderungskontext ausführen und anschließend mit einem |anderen Änderungskontext erneut ausführen, werden alle |Klassen zweimal im Cache gespeichert.
  |
  - destroy (Dienstprogrammoption) |
    |
    - Löscht einen Cache unter Verwendung des Namens, der mit |der Unteroption name=<Name> |angegeben wurde. Falls kein Name angegeben wird, wird der Standardcache gelöscht. Ein Cache kann nur gelöscht werden, wenn alle VMs, die |diesen Cache verwenden, heruntergefahren wurden und der Benutzer über |die erforderlichen Berechtigungen verfügt.
  |
  - destroyAll (Dienstprogrammoption) |
    |
    - Versucht, alle für den Benutzer verfügbaren Caches zu |löschen. Ein Cache kann nur gelöscht werden, wenn alle VMs, die |diesen Cache verwenden, heruntergefahren wurden und der Benutzer über |die erforderlichen Berechtigungen verfügt.
  |
  - expire=<Zeit in Minuten> (Dienstprogrammoption) |
    |
    - Löscht alle Caches, die während des angegebenen |Zeitraums nicht verwendet wurden.
  |
  - listAllCaches (Dienstprogrammoption) |
    |
    - Listet alle Caches im System auf und zeigt an, ob diese im Gebrauch sind und wann sie zum letzten Mal verwendet wurden.
  |
  - printStats (Dienstprogrammoption) |
    |
    - Zeigt eine Zusammenfassung statistischer Daten zu dem |Cache an, der über die Unteroption name=<Name> |angegeben wurde. Falls kein Name angegeben wird, werden statistische Daten zum |Standardcache angezeigt. Zu den nützlichsten |Informationen gehören die Angaben zur Speicherbelegung im Cache und die Anzahl der darin enthaltenen Klassen. Beachten Sie, dass es sich bei "veralteten" Klassen um Klassen handelt, die auf dem |Dateisystem aktualisiert wurden und die der Cache daher mit "veraltet" gekennzeichnet hat. Veraltete Klassen werden nicht |aus dem Cache gelöscht. Weitere Informationen finden Sie im Handbuch Diagnostics |Guide.
  |
  - printAllStats (Dienstprogrammoption) |
    |
    - Zeigt ausführliche Informationen zum Inhalt des Caches an, |der in der Unteroption name=<Name> |angegeben wurde. |Falls kein Name angegeben wird, werden statistische Daten zum |Standardcache angezeigt. |Alle Klassen werden in chronologischer |Reihenfolge zusammen mit einem Verweis auf die Speicherposition |aufgelistet, von der aus sie geladen wurden. Weitere Informationen finden Sie im Handbuch Diagnostics |Guide.

| |

## Erstellen, Belegen, Überwachen und Löschen eines Caches

|

Zum Aktivieren der gemeinsamen Nutzung von Klassen müssen Sie |die Angabe -Xshareclasses[:name=<Name>] in |der Befehlszeile Ihrer Anwendung hinzufügen. VM stellt |dann entweder eine Verbindung zu einem vorhandenen Cache mit dem |angegebenen Namen her oder erstellt einen neuen Cache mit diesem |Namen. Wenn ein neuer Cache erstellt wurde, wird dieser mit allen |Boot- und Anwendungsklassen gefüllt, die geladen wurden, bis der Cache voll wird. Sollten |zwei oder mehr VMs gleichzeitig gestartet werden, schreiben diese |gleichzeitig Daten in den Cache.

|

Wenn Sie überprüfen möchten, ob der Cache erstellt wurde, führen |Sie den Befehl `java -Xshareclasses:listAllCaches` aus. Sie müssen den Befehl `java -Xshareclasses:[name=<Name>],printStats` ausführen, um anzuzeigen, wie viele Klassen und Klassendaten gemeinsam genutzt werden. (Diese Dienstprogramme können entweder nach der Beendigung der |Anwendungs-VM oder in einem anderen Befehlsfenster ausgeführt werden.)

|

Wenn Sie Klassen anzeigen möchten, die in den Cache |geladen oder im Cache gespeichert wurden, fügen Sie in der |Befehlszeile Ihrer Anwendung `-Xshareclasses:[name=<Name>],verbose` |hinzu.

|

Zum Löschen des zuvor erstellten Caches führen Sie den Befehl |`java -Xshareclasses:[name=<Name>],delete` aus. Caches müssen normalerweise nur dann gelöscht werden, wenn sie |zahlreiche veraltete Klassen enthalten bzw. wenn der Cache voll |ist und Sie einen größeren Cache erstellen möchten.

|

Es wird empfohlen, die Cachegröße für Ihre spezielle Anwendung zu optimieren, da die Standardeinstellung sehr wahrscheinlich nicht die optimale Größe angibt. Am besten ermitteln Sie die optimale Cachegröße, indem Sie einen großen Cache (mit -Xscmx) angeben, die Anwendung ausführen und dann mit printStats ermitteln, wie viele Klassendaten gespeichert wurden. Addieren Sie für alle Fälle einen kleinen Betrag zu dem in printStats angezeigten Wert hinzu. Da Klassen jederzeit während der Lebensdauer von VM geladen werden können, empfiehlt es sich, diese Analyse nach Beendigung der Anwendung durchzuführen. Da jedoch ein voller Cache keine negativen Auswirkungen auf die Leistung oder Funktionalität von VMs hat, die mit diesem Cache verbunden sind, können Sie auch eine kleinere als die erforderliche Cachegröße auswählen.

|

Wenn ein Cache voll wird, wird eine entsprechende Nachricht in der Befehlszeile aller VMs angezeigt, die diesen Cache verwenden. Diese VMs laden dann weitere Klassen in ihren eigenen Prozessspeicher. Die in einem vollen Cache enthaltenen |Klassen können weiterhin gemeinsam genutzt werden, der volle |Cache ist jedoch schreibgeschützt und kann nicht mit neuen |Klassen aktualisiert werden.

| |

## Leistung und Speicherbelegung

|

Die gemeinsame Nutzung von Klassen empfiehlt sich |insbesondere auf Systemen, auf denen mit mehreren VMs |gearbeitet wird, die ähnlichen Code ausführen. Diese Systeme profitieren von der |geringeren virtuellen Speicherbelegung. Außerdem ist die gemeinsame Nutzung von Klassen auf Systemen sinnvoll, auf denen VMs häufig |gestartet und heruntergefahren werden. Auf diesen Systemen |verkürzt sich dadurch der Zeitraum für den Systemstart.

|

Der Aufwand für das Erstellen und Belegen eines neuen Caches |ist minimal. Wenn Sie die gemeinsame Nutzung von Klassen verwenden, aber nur eine einzige VM starten, dauert der Startvorgang 0 bis 5 % länger als der Startvorgang einer VM, die die gemeinsame Nutzung von Klassen nicht verwendet. Wenn Sie die gemeinsame Nutzung von Klassen verwenden und zwei VMs starten, lädt die zweite VM 10 bis 40 % schneller als eine VM, die die gemeinsame Nutzung von Klassen nicht verwendet. Dies hängt vom Betriebssystem |und der Anzahl geladener Klassen ab. Bei mehreren gleichzeitig ablaufenden VMs ergeben sich größere Verkürzungen bei der Startzeit.

|

Wenn bei der Ausführung Ihrer Anwendung die gemeinsame |Nutzung von Klassen aktiviert ist, können Sie mit Hilfe von |Betriebssystemtools die Verringerung der virtuellen Speicherbelegung anzeigen.

| |

## Einschränkungen und besondere Aspekte bei der gemeinsamen Nutzung von Klassen

| |

### Grenzwerte für die Cachegröße

|

Die maximale theoretische Cachegröße beträgt 2 GB. Der Cache wird durch die folgenden Faktoren begrenzt:

|

|

|
- Verfügbarer Plattenspeicherplatz. Auf der Platte wird eine Datei im Verzeichnis "javasharedresources" unter dem Benutzerprofil erstellt, in der die Klassendaten gespeichert werden. Das Verzeichnis "javasharedresources" befindet sich in der Regel unter "C:\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten\". |Die erstellte Datei wird bei jedem Neustart von Windows gelöscht.
|
- Verfügbarer virtueller Adressraum. Da der virtuelle Adressraum eines Prozesses vom Cache für gemeinsam genutzteKlassen und dem Java-Freispeicher gemeinsam genutzt wird, verringert sich bei Erhöhung der maximalen Größe des Java-Freispeichers die Größe des Caches für gemeinsam genutzte Klassen, den Sie erstellen können.

| |

### Änderungen bei Laufzeitbytecodes

|

Damit VMs, die einen JVMTI-Agenten verwenden, mit dem Bytecode |geändert werden kann, die gemeinsame Nutzung von Klassen |ermöglicht wird, muss in der Befehlszeile die Unteroption |modified=<Geänderter Kontext> verwendet werden (siehe oben). Bei dem geänderten Kontext handelt es sich um einen benutzerdefinierten Deskriptor, der die Art der durchgeführten Änderung beschreibt. Alle VMs, die einen bestimmten geänderten Kontext |verwenden, müssen den Bytecode für jede Klasse in einer berechenbaren, |wiederholt anwendbaren Weise ändern, so dass die im Cache gespeicherten, |geänderten Klassen die erwarteten Änderungen aufweisen, |wenn sie von einer anderen VM geladen werden. Der Grund dafür, |dass alle Änderungen berechenbar sein müssen, besteht darin, dass |Klassen, die aus dem Cache für gemeinsam genutzte Klassen geladen |wurden, nicht über den Agenten erneut geändert werden können. Geänderter |und nicht geänderter Bytecode kann im selben Cache gespeichert |werden. Weitere Informationen hierzu finden Sie im Handbuch |Diagnostics Guide.

| |

### Betriebssystemeinschränkungen

|

Bei Betriebssystemen, die sowohl |32-Bit-Anwendungen als auch 64-Bit-Anwendungen ausführen können, ist |die gemeinsame Nutzung von Klassen zwischen VMs mit 32 Bit und 64 Bit |nicht zulässig. |Mit der Unteroption listAllCaches werden je |nach Adressmodus der verwendeten VM 32-Bit- oder 64-Bit-Caches |aufgelistet.

|

Der Cache für gemeinsam genutzte Klassen benötigt |Plattenspeicherplatz zum Speichern von ID-Informationen zu den Caches auf dem System. Diese |Informationen sind im Verzeichnis mit dem Benutzerprofil enthalten. Wenn das Verzeichnis mit |den ID-Informationen gelöscht wird, kann VM die gemeinsam |genutzten Klassen auf dem System nicht identifizieren und muss den Cache erneut |erstellen.

|

Die Berechtigungen für den Zugriff auf einen Cache für gemeinsam genutzte Klassen werden vom Betriebssystem umgesetzt. Falls kein Cachename angegeben wird, wird der |Benutzername an den Standardnamen angehängt, damit mehrere Benutzer |auf demselben System standardmäßig eigene Caches erstellen.

| |

### Verwenden von SharedClassPermission

|

Wenn ein Sicherheitsmanager zusammen mit der gemeinsamen Nutzung von Klassen verwendet wird und die ausgeführte Anwendung ihre eigenen Klassenladeprogramme verwendet, müssen diesen Klassenladeprogrammen Berechtigungen zur gemeinsamen Nutzung von Klassen erteilt werden, bevor sie Klassen gemeinsam nutzen können. Fügen Sie der Datei java.policy Berechtigungen zur gemeinsamen Nutzung von Klassen unter Verwendung des Klassennamens des Klassenladeprogramms (Platzhalterzeichen sind zulässig) und "read", "write" oder "read,write" zur Angabe der erteilten Zugriffsberechtigung hinzu. |Beispiel:

|

    permission com.ibm.oti.shared.SharedClassPermission "com.abc.customclassloaders.*", "read,write";

Wenn ein Klassenladeprogramm nicht die korrekten Berechtigungen hat und versucht, Klassen gemeinsam zu nutzen, wird die Ausnahmebedingung AccessControlException ausgelöst. Sie können die Berechtigungen der Klassenladeprogramme für das Standardbootprogramm, für Anwendungen oder Erweiterungen nicht ändern oder verringern.

| |

## Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen

|

Die meisten Java-Anwendungen verwenden die Klassenladeprogramme |von VM oder verfügen über benutzerdefinierte Klassenladeprogramme, |die eine Erweiterung zu java/net/URLClassLoader darstellen. Anwendungen, |die diese Klassenladeprogramme verwenden, können automatisch Boot- und Anwendungsklassen gemeinsam nutzen. |Benutzerdefinierte Klassenladeprogramme, die keine Erweiterung |zu java/net/URLClassLoader darstellen, müssen bearbeitet werden, um |mit der gemeinsamen Nutzung von Klassen arbeiten zu können. Allen benutzerdefinierten Klassenladeprogrammen müssen Berechtigungen zur gemeinsamen Nutzung von Klassen erteilt werden, wenn ein Sicherheitsmanager verwendet wird. Weitere Informationen hierzu finden Sie im Abschnitt Verwenden von SharedClassPermission. IBM |bietet mehrere Java-Schnittstellen für verschiedene Typen von |benutzerdefinierten Klassenladeprogrammen, mit denen die |Programme im Cache für gemeinsam genutzte Klassen nach Klassen suchen |und diese speichern können. Diese Klassen befinden sich im Paket "com.ibm.oti.shared". Die Javadoc-Komponente für dieses Paket wird mit SDK in der Datei docs/apidoc.zip mitgeliefert. Weitere Informationen zur Verwendung |dieser Schnittstellen finden Sie im Handbuch Diagnostics |Guide.

# Service und Unterstützung für unabhängige Softwareanbieter

Falls Sie berechtigt sind, Serviceleistungen für den Programmcode des Programms 'IBM Solutions Developer Program' in Anspruch zu nehmen, gehen Sie hierbei wie gewohnt vor, oder rufen Sie das Programm im Internet unter folgender Adresse auf: http://www-1.ibm.com/partnerworld/.

Wenn Sie einen Servicevertrag (z. B. für IBM Personal Systems Support Line oder für einen vergleichbaren, in Ihrem Land verfügbaren Service) unterzeichnet haben, ist in den Vertragsbedingungen dieses Servicevertrags festgelegt, welche Services Sie - falls verfügbar - gemäß dem o g. Programm in Anspruch nehmen dürfen.

# Eingabehilfen

Die Benutzerhandbücher, die zusammen mit SDK und Runtime Environment geliefert werden, wurden mit Hilfe von Sprachausgabeprogrammen getestet. Sie können ein Sprachausgabeprogramm, wie z. B. Home Page Reader oder das JAWS-Sprachausgabeprogramm, zusammen mit diesen Benutzerhandbüchern verwenden.

Verwenden Sie zum Ändern der Schriftgrößen in den Benutzerhandbüchern die Funktion, die in Ihrem Browser enthalten ist. Sie finden diese Funktion normalerweise im Menü Ansicht.

Benutzer, die über die Tastatur navigieren müssen, finden unter "Swing Key Bindings" (http://www-128.ibm.com/developerworks/java/jdk/additional/) eine Beschreibung von nützlichen Tastatureingaben für Swing-Anwendungen.

## iKeyman-Eingabehilfen

|Zusätzlich zur GUI verfügt das iKeyman-Tool über das Befehlszeilentool IKEYCMD, das dieselben Funktionen wie die iKeyman-GUI aufweist. Mit IKEYCMD können Sie Schlüssel, Zertifikate und Zertifikatsanforderungen verwalten. Sie können IKEYCMD über native Shell-Scripts und Programme aufrufen, die verwendet werden sollen, wenn Anwendungen benutzerdefinierte Schnittstellen zu Zertifikaten und wichtigen Verwaltungstasks hinzufügen müssen. IKEYCMD kann für alle Typen, die zurzeit von iKeyman unterstützt werden, Schlüsseldateien erstellen. IKEYCMD kann auch Zertifikatsanforderungen erstellen, CA-signierte Zertifikate importieren und selbstsignierende Zertifikate verwalten.

Geben Sie zum Ausführen eines IKEYCMD-Befehls Folgendes ein:

    java [-Dikeycmd.properties=<Merkmaldatei>]com.ibm.gsk.ikeyman.ikeycmd
    <Objekt> <Aktion> [Optionen]

Dabei gilt Folgendes:

<Objekt>
  steht für Folgendes:
  -keydb
    Aktionen, die für die Schlüsseldatenbank ausgeführt werden (eine CMS-Schlüsseldatei, eine WebDB-Schlüsselringdatei oder SSLight-Klasse).
  -cert
    Aktionen, die für ein Zertifikat in einer Schlüsseldatenbank ausgeführt werden sollen.
  -certreq
    Aktionen, die für eine Zertifikatsanforderung in einer Schlüsseldatenbank ausgeführt werden sollen.
  -version
    Zeigt Versionsinformationen für IKEYCMD an.
  -help
    Zeigt einen Hilfetext für die IKEYCMD-Aufrufe an.
<Aktion>
  |Die Aktion, die für das Objekt ausgeführt werden soll. Wenn Sie die verfügbaren Aktionen für ein Objekt anzeigen wollen, rufen Sie IKEYCMD auf, wobei nur das Objekt als Argument übergeben wird. In der kontextbezogenen Hilfe werden die verfügbaren Aktionen für dieses Objekt angezeigt.
-Dikeycmd.properties
  Gibt den Namen einer optionalen Merkmaldatei an, die für diesen Java-Aufruf verwendet werden soll. Die Standardmerkmaldatei ikeycmd.properties wird als Musterdatei zur Verfügung gestellt, die geändert und von einer beliebigen Java-Anwendung verwendet werden kann.

Anmerkung:
Die Objekt- und Aktionsschlüsselwörter müssen in der angegebenen Reihenfolge aufgeführt sein. Optionen sind jedoch nicht positionsgebunden und können in beliebiger Reihenfolge aufgeführt werden, sofern sie als Option und Operandenpaar angegeben werden.

Weitere Informationen finden Sie im Handbuch "iKeyman User Guide" unter http://www.ibm.com/developerworks/java/jdk/security/index.html.

## Verschieben des Eingabefokus von JComboBox-Komponenten in Swing per Tastatur

Beim Blättern in der Dropdown-Liste einer JComboBox-Komponente mit den Cursortasten kann der Wert mit Hilfe des Knopfs oder des editierbaren Felds des Kombinationsfelds nicht geändert werden, solange ein Element ausgewählt ist. Mit diesem für dieses Release gewünschten Verhalten verbessern sich Eingabehilfen und Benutzerfreundlichkeit, da sichergestellt wird, dass das Verschieben des Eingabefokus per Tastatur dem Verschieben des Eingabefokus per Maus entspricht.

## Web Start-Eingabehilfen

In IBM Java Web Start V5.0 wurden im Vergleich zum vorherigen Release Eingabehilfen und Benutzerfreundlichkeit verbessert. Dazu gehören z. B. eine bessere Unterstützung für Sprachausgabeprogramme und eine bessere Navigation über die Tastatur.

Sie können die Befehlszeile nur zum Starten einer Java-Anwendung verwenden, die für Web Start aktiviert ist. Zum Ändern von Einstellungsoptionen müssen Sie die Konfigurationsdatei Application Data\IBM\Java\Deployment\deployment.properties im Ausgangsverzeichnis des Benutzers editieren. Sichern Sie die Datei, bevor Sie sie editieren. Nicht alle Einstellungen, die in Java Application Cache Viewer festgelegt werden können, sind in der Konfigurationsdatei verfügbar.

# Allgemeine Hinweise zu Sicherheitsfunktionen

Uneingeschränkte JCE-Richtliniendateien finden Sie unter http://www.ibm.com/developerworks/java/jdk/security/index.html. Auf dieser Website finden Sie auch die Dokumentation zu den IBM Sicherheitspaketen JCE, JCEFIPS, JSSE2, JSSEFIPS, JGSS und JAAS sowie zur Hardwareverschlüsselung.

# Bekannte Einschränkungen

In IBM 32-bit SDK for Windows, v5.0 sind folgende Einschränkungen zu beachten:

- IBM 32-bit SDK for Windows, v5.0 unterstützt folgende Ländereinstellungen:
  - Bengali (bn_IN)
  - Malayalam (ml_IN)
  - Oriya (or_IN)
  Die Schriftarten für diese Ländereinstellungen funktionieren jedoch möglicherweise nicht zusammen mit AWT-Komponenten.

- IBM 32-bit SDK for Windows, v5.0 unterstützt IPv6. |Da die derzeitige IPv6-Unterstützung unter Windows nicht über die Dual-Stack-Fähigkeit verfügt, |emuliert SDK das Dual-Stack-Verhalten auf einem System mit IPv6. Ihre Java-Anwendung |verwendet je nach Emulation möglicherweise bis zu doppelt so viele Sockets. Wenn Sie diese Emulation inaktivieren möchten, müssen Sie die IPv6-Unterstützung in SDK |inaktivieren. Setzen Sie dazu das Systemmerkmal java.net.preferIPv4Stack auf `true`.

- Wenn Sie mit einem Editor für Eingabemethoden (Input Method Editor, IME) arbeiten, sollten Sie die Zeichenzusammensetzung beendet und die Kandidaten ausgewählt haben, bevor Sie den Arbeitsbereich für weitere Verarbeitungen verwenden.

- Das Erstellen von besonders langen DSA-Schlüsselpaaren kann auf langsamen Maschinen sehr lange dauern. Verzögerungen bedeuten hierbei nicht, dass es zu einem Systemabsturz gekommen ist. Der Prozess wird stattdessen abgeschlossen, wenn genügend Zeit eingeräumt wird. Der Algorithmus für die Generierung von DSA-Schlüsseln wurde optimiert, um Schlüssel mit Standardlängen (z. B. 512 oder 1024) schneller zu generieren als andere.

- Persönliche Firewalls können zu Fehlern im Windows NIO-Code führen, sodass bestimmte Operationen fehlschlagen. Der Methodenaufruf Selector.open() kann z. B. zu der Ausnahmebedingung `java.io.IOException: Unable to establish loopback connection` mit der Ursache `java.net.ConnectException: Connection refused: connect` führen. Die Ausnahmebedingung wird durch das Betriebssystem beim Herstellen der Verbindung zu einem Port verursacht, der von der Firewall blockiert wird. JVM versucht, die Verbindung erneut herzustellen, wobei das Betriebssystem eine andere Portnummer verwenden soll. Falls die Verbindung auch nach mehreren Versuchen nicht hergestellt werden kann, wird die Ausnahmebedingung `ConnectException` angezeigt.

  Wenn diese Ausnahmebedingung angezeigt wird, können Sie durch Festlegen des Systemmerkmals java.nio.debug=pipe anzeigen, welche Portnummern blockiert werden.

- Wenn ein Benutzer bei der Verwendung von IME Text in TextArea von AWT eingibt, und anschließend die Größe des Anwendungsfensters vor dem Festschreiben des Texts ändert, wird der Text automatisch festgeschrieben.

- Unter Windows 2000 und Windows XP ist der Standardwert für die Anzahl Dateien, die gleichzeitig geöffnet sein können, zu klein. Dies kann zu Fehlern bei E/A-intensiven Anwendungen führen. Wenn Sie diese Einschränkung beheben möchten, müssen Sie in der Datei <windows>\system32\CONFIG.NT folgende Werte angeben:
  - `files=200`
  - `buffers=60`
  <windows> ist hierbei das Verzeichnis, in dem Windows installiert wurde.

- Der DirectDraw-Mechanismus von JVM zeichnet unter Windows 2000 bei einer Bildtiefe von 32 Bit den Bereich unter dem Mauszeiger nicht nach. Dadurch werden in Menüs in den Bereichen graue oder schwarze Quadrate angezeigt, über die der Mauszeiger bewegt wurde. Zum Vermeiden dieses Effekts, müssen Sie entweder DirectDraw inaktivieren (`-Dsun.java2d.noddraw`) oder für die Auflösung der Anzeigenfarbe einen anderen Wert (z. B. 256 Farben) festlegen.

- Wenn Sie die native Bibliothek PKCS 11 auf JVM Version 1.4.x installieren, müssen Sie die Bibliothek zusammen mit den anderen nativen JRE-Bibliotheken in das JRE-Verzeichnis "bin" stellen.

- Der NIO-Aufruf SocketChannel finishConnect() gibt entweder `true` (der Kanal ist verbunden), `false` (der Prozess zum Herstellen der Verbindung ist noch nicht abgeschlossen) oder eine Ausnahmebedingung zurück. Unter Windows 2000 wird bei Verwendung nicht geblockter Verbindungen selbst dann `false` zurückgegeben, wenn ein zuvor durchgeführter Java-Aufruf select() angezeigt hat, dass ein Kanal für die Verarbeitung zur Verfügung steht.

- Sie können den Stackbereich des Java-Hauptthreads (wird auch als "ursprünglicher Thread" bezeichnet) während der Ausführung nicht ändern. Der Hauptthread hat eine feste Größe von 256 KB, die im Hinblick auf die Leistung als optimale Größe ermittelt wurde. Mit der Option -Xss können Sie den Stackbereich in allen Threads außer dem Hauptthread ändern. Auf Grund der festen Größe des Hauptthreads empfiehlt es sich, nicht zu häufig rekursive Vorgänge durchzuführen, da beim Hauptthread häufiger Stacküberläufe auftreten als bei anderen Threads.

- Wenn Sie Doppelbytezeichen in JTextArea, JTextField oder JFileChooser eingeben, kann das Wechseln von einigen chinesischen IMEs (besonders Chinese Internal Code und Zhengma) zu Intelligent ABC IME dazu führen, dass ein Kernspeicherauszug erzeugt wird.

- Für Benutzer der tschechischen Version wird in der Anzeige zur Sprachauswahl des Installationsprogramms ein übersetzter Eintrag in einer Installation angezeigt, die ansonsten nicht übersetzt ist. Diese Einschränkung wird vom Installationsprogramm verursacht. Diese Zeichenfolge wird aus dem Betriebssystem basierend auf der Codepage übernommen. Da sowohl Polnisch (in diese Sprache wurde die Installation übersetzt) als auch Tschechisch die Codepage 1250 haben, versucht das Installationsprogramm, eine Sprachenliste für beide Sprachen aus dem System abzurufen. Dies führt zu dieser Zeichenfolge in der Sprachenliste.

- Wenn Sie traditionelles Chinesisch verwenden, leiten Sie die Ausgabe Ihrer Java-Anwendung nicht direkt in den Befehl more um. Leiten Sie die Ausgabe stattdessen in eine temporäre Datei, und zeigen Sie die Datei separat an.

- Benutzer der katalanischen Version sollten die Schriftart Lucida Console verwenden, um fehlerhafte Großbuchstaben mit Akzent zu vermeiden. Dies betrifft nur Benutzer von Windows 2000.

# Kommentare zu diesem Handbuch

Wenn Sie Ihren Kommentar zur Zweckmäßigkeit oder zu anderen Eigenschaften dieses Benutzerhandbuchs mitteilen möchten, können Sie sich über eine der im Folgenden aufgeführten Möglichkeiten an uns wenden. Beachten Sie, dass diese Mitteilungswege nicht eingerichtet wurden, um technische Fragen zu beantworten. Sie sind nur für Kommentare zur Dokumentation bestimmt. Senden Sie Ihre Kommentare an folgende Adresse:

- Per E-Mail: idrcf@hursley.ibm.com
- Per Fax:
  - Von Großbritannien: 01962 842327
  - Von anderen Ländern: <Internationaler Code>44 1962 842327
- Per Post:
  IBM United Kingdom Ltd
  User Technologies,
  Mail Point 095
  Hursley Park
  Winchester
  Hampshire
  SO21 2JN
  United Kingdom

Das Kleingedruckte. Wenn Sie eine Nachricht an IBM senden, erklären Sie sich einverstanden, dass alle in Ihrer Nachricht enthaltenen Informationen, einschließlich der Rückmeldedaten, wie beispielsweise Fragen, Kommentare, Anregungen o. Ä., nicht vertraulich behandelt werden und dass IBM keinerlei Verpflichtungen in Bezug auf diese Informationen hat und diese uneingeschränkt abdrucken, verwenden, veröffentlichen und an andere weitergeben kann. Des Weiteren kann IBM in diesen Informationen enthaltene Ideen, Konzepte oder Angaben zu Know-how oder technischen Verfahren uneingeschränkt und für beliebige Zwecke verwenden, u. a. für die Entwicklung, die Produktion und das Marketing von Produkten, die diese Informationen enthalten.

# Bemerkungen

Die vorliegenden Informationen wurden für Produkte und Services entwickelt, die auf dem deutschen Markt angeboten werden. Möglicherweise bietet IBM die in dieser Dokumentation beschriebenen Produkte, Services oder Komponenten in anderen Ländern nicht an. Informationen über die gegenwärtig im jeweiligen Land verfügbaren Produkte und Services sind beim IBM Ansprechpartner erhältlich. Hinweise auf IBM Lizenzprogramme oder andere IBM Produkte bedeuten nicht, dass nur Programme, Produkte oder Services von IBM verwendet werden können. An Stelle der IBM Produkte, Programme oder Services können auch andere ihnen äquivalente Produkte, Programme oder Services verwendet werden, solange diese keine gewerblichen oder anderen Schutzrechte der IBM verletzen. Die Verantwortung für den Betrieb von Fremdprodukten, Fremdprogrammen und Fremdservices liegt beim Kunden.

Für in diesem Handbuch beschriebene Erzeugnisse und Verfahren kann es IBM Patente oder Patentanmeldungen geben. Mit der Auslieferung dieses Handbuchs ist keine Lizenzierung dieser Patente verbunden. Lizenzanforderungen sind schriftlich an folgende Adresse zu richten (Anfragen an diese Adresse müssen auf Englisch formuliert werden):

- IBM Europe
  Director of Licensing
  92066 Paris La Defense Cedex
  France

Trotz sorgfältiger Bearbeitung können technische Ungenauigkeiten oder Druckfehler in dieser Veröffentlichung nicht ausgeschlossen werden. Die Angaben in diesem Handbuch werden in regelmäßigen Zeitabständen aktualisiert. Die Änderungen werden in Überarbeitungen oder in Technical News Letters (TNLs) bekannt gegeben. IBM kann jederzeit ohne Vorankündigung Verbesserungen und/oder Änderungen an den in dieser Veröffentlichung beschriebenen Produkten und/oder Programmen vornehmen.

Verweise in diesen Informationen auf Websites anderer Anbieter dienen lediglich als Benutzerinformationen und stellen keinerlei Billigung des Inhalts dieser Websites dar. Das über diese Websites verfügbare Material ist nicht Bestandteil des Materials für dieses IBM Produkt. Die Verwendung dieser Websites geschieht auf eigene Verantwortung.

Werden an IBM Informationen eingesandt, können diese beliebig verwendet werden, ohne dass eine Verpflichtung gegenüber dem Einsender entsteht.

Lizenznehmer des Programms, die Informationen zu diesem Produkt wünschen mit der Zielsetzung: (i) den Austausch von Informationen zwischen unabhängigen, erstellten Programmen und anderen Programmen (einschließlich des vorliegenden Programms) sowie (ii) die gemeinsame Nutzung der ausgetauschten Informationen zu ermöglichen, wenden sich an folgende Adresse:

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

Die Bereitstellung dieser Informationen kann unter Umständen von bestimmten Bedingungen - in einigen Fällen auch von der Zahlung einer Gebühr - abhängig sein.

Die Lieferung des in der Informationsdatei aufgeführten Lizenzprogramms sowie des zugehörigen Lizenzmaterials erfolgt im Rahmen der Allgemeinen Geschäftsbedingungen der IBM oder einer äquivalenten Vereinbarung.

Alle in diesem Dokument enthaltenen Leistungsdaten stammen aus einer gesteuerten Umgebung. Die Ergebnisse, die in anderen Betriebsumgebungen erzielt werden, können daher erheblich von den hier erzielten Ergebnissen abweichen. Einige Daten stammen möglicherweise von Systemen, deren Entwicklung noch nicht abgeschlossen ist. Eine Gewährleistung, dass diese Daten auch in allgemein verfügbaren Systemen erzielt werden, kann nicht gegeben werden. Darüber hinaus wurden einige Daten unter Umständen durch Extrapolation berechnet. Die tatsächlichen Ergebnisse können abweichen. Benutzer dieses Dokuments sollten die entsprechenden Daten in ihrer spezifischen Umgebung prüfen.

Alle Informationen zu Produkten anderer Anbieter stammen von den Anbietern der aufgeführten Produkte, deren veröffentlichten Ankündigungen oder anderen allgemein verfügbaren Quellen. IBM hat diese Produkte nicht getestet und kann daher keine Aussagen zu Leistung, Kompatibilität oder anderen Merkmalen machen. Fragen zu den Leistungsmerkmalen von Produkten anderer Anbieter sind an den jeweiligen Anbieter zu richten.

## Marken

IBM ist in gewissen Ländern eine Marke der International Business Machines Corporation.

Java und alle Java-basierten Marken und Logos sind in gewissen Ländern Marken oder eingetragene Marken von Sun Microsystems, Inc.

Microsoft, Windows und das Windows-Logo sind in gewissen Ländern Marken der Microsoft Corporation.

Andere Namen von Unternehmen, Produkten oder Dienstleistungen können Marken oder Dienstleistungsmarken anderer Unternehmen sein.

Dieses Produkt basiert auch teilweise auf der Arbeit zum Projekt FreeType. Weitere Informationen zu Freetype finden Sie unter http://www.freetype.org.

Dieses Produkt enthält Software, die von der Apache Software Foundation (http://www.apache.org/) entwickelt wurde.