# IBM 31-bit Runtime Environment for Linux on zSeries, Java 2 Technology Edition, Version 1.4.1; 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 31-bit Runtime Environment for Linux on zSeries, Java 2 Technology Edition, Version 1.4.1, und auf alle nachfolgenden Releases und Änderungen, bis zur Herausgabe neuer Dateiversionen.

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

(c) Copyright International Business Machines Corporation, 1999, 2003. All rights reserved.

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

# Vorwort

IBM(R) 31-bit Runtime Environment for Linux on zSeries(R), Java(TM) 2 Technology Edition, Version 1.4.1 umfasst Java Virtual Machine (JVM), die wichtigsten Java-Klassen von Sun Microsystems und Unterstützungsdateien. Runtime Environment enthält nicht alle Klassen des SDK-Pakets.

Das Benutzerhandbuch stellt allgemeine Informationen zu Runtime Environment und spezielle Informationen zu allen Unterschieden zwischen der IBM Implementierung und der Sun Microsystems-Implementierung von Runtime Environment zur Verfügung. Lesen Sie dieses Benutzerhandbuch zusammen mit der ausführlicheren Dokumentation auf der folgenden Website von Sun Microsystems: http://java.sun.com.

Unter der folgenden Adresse finden Sie eine Liste der Distributionen, mit denen SDK unter Linux getestet wurde: http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html

Beachten Sie, dass es sich bei Runtime Environment for Linux um eine Untergruppe von SDK handelt, mit der Sie nur Java-Anwendungen ausführen können. Wenn Sie SDK installiert haben, ist auch Runtime Environment enthalten.

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

Technische Änderungen, die in diesem Benutzerhandbuch zu Version 1.4.1 enthalten sind, außer unwichtiger oder offensichtlicher Änderungen, wie beispielsweise die Aktualisierung von "1.4.0" in "1.4.1", 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.

# Inhaltsverzeichnis

Copyrightvermerk

Vorwort

Übersicht

- Versionskompatibilität
- In Runtime Environment for Linux enthaltene Dateien
- Lizenzvereinbarung
- Der JIT-Compiler (Just-in-Time)
- Native Method Interface und Java Native Interface

  Konfigurieren von Runtime Environment for Linux

  Deinstallieren von Runtime Environment for Linux

- Deinstallieren des installierbaren RPM-Pakets (Red Hat Package Manager)
- Deinstallieren des komprimierten TAR-Pakets (Tape Archive)

  Starten einer Java-Anwendung

- Befehle im Überblick
- Optionen
- Standardoptionen
- Vom Standard abweichende Optionen
- Globalisierung des Befehls 'java'
- Arbeiten mit Klassenpfaden
- |Signalverarbeitung durch die JVM
- |Von der JVM verwendete Signale
- |Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek
- Arbeiten mit dem Merkmal 'bootclasspath'
- Angeben der Garbage Collection-Richtlinie
- Pausezeit
- Verringerung der Pausezeit
- Umgebungen mit sehr vollen Freispeichern
- Weitere Informationen zu Garbage Collection

  Abrufen der IBM Build- und Versionsnummer

  Verwenden der Funktion 'floating stacks'

  Ändern der Eingabemethode in DBCS-Sprachen

  Beispiel für Laufzeit-Software

  Installieren Ihrer Anwendung auf dem System eines Benutzers

  Bekannte Einschränkungen

  Bemerkungen

- Marken

  # Übersicht

  Runtime Environment for Linux enthält die zum Erstellen einer Java-Laufzeitumgebung und zum Ausführen von Java-Programmen erforderlichen Untergruppen von Klassen. Es umfasst außerdem die Java Virtual Machine, Java-Klassen und Unterstützungsdateien. Runtime Environment for Linux enthält nur eine Untergruppe der Klassen aus SDK.

  ## Versionskompatibilität

  |Normalerweise werden alle Applets oder Anwendungen, die in Version |1.1.8, 1.2.2 oder 1.3.1 von SDK for |Linux ausgeführt werden können, auch in dieser Version ordnungsgemäß |ausgeführt. Applets, die unter Java 1.4.1-APIs von Sun |ausgeführt werden, funktionieren nur mit Browsern, die Java |1.4.1-APIs unterstützen.

  Es ist nicht gewährleistet, dass mit Version 1.4.1 kompilierte Klassen mit einem Runtime Environment-Release vor Version 1.4.0 funktionieren.

  ## In Runtime Environment for Linux enthaltene Dateien

  Runtime Environment for Linux enthält SO-Dateien, die nicht für die Verwendung mit einem Debugger geeignet sind, sowie Klassendateien, die zur Unterstützung eines Programms zur Laufzeit benötigt werden. Runtime Environment for Linux enthält keines der Entwicklungstools, wie appletviewer oder javac, und auch keine Klassen, die nur zu einem Entwicklungssystem gehören.

  ## Lizenzvereinbarung

  Die Datei LICENSE_xx.html enthält die Lizenzvereinbarung für die Software von Runtime Environment for Linux. (xx ist eine Abkürzung für die Sprache.)

  Zum Anzeigen oder Drucken der Lizenzvereinbarung können Sie die Datei in einem Webbrowser öffnen.

  ## Der JIT-Compiler (Just-in-Time)

  Der JIT-Compiler (Just-in-Time), libjitc.so, generiert während der Ausführung dynamisch Maschinencode für häufig verwendete Bytecodesequenzen in Java-Anwendungen und Java-Applets.

  Runtime Environment für Linux enthält den JIT-Compiler (libjitc.so), der standardmäßig aktiviert ist. Sie können den JIT-Compiler inaktivieren, um beispielsweise mögliche Probleme mit einer Java-Anwendung, einem Java-Applet oder dem Compiler selbst einzugrenzen.

  Geben Sie zum Inaktivieren des JIT-Compilers folgenden Befehl an einer Shelleingabeaufforderung in dem Fenster ein, über das Sie die Anwendung ausführen möchten:

          export JAVA_COMPILER=NONE

  Geben Sie folgenden Befehl an der Shelleingabeaufforderung ein, um den JIT-Compiler zu aktivieren:

          export JAVA_COMPILER=jitc

  Wenn Sie prüfen wollen, ob der JIT-Compiler aktiviert ist, geben Sie folgenden Befehl an der Shelleingabeaufforderung ein:

          java -version

  Wenn der JIT-Compiler aktiv ist, wird folgende Nachricht angezeigt:

      (JIT enabled: jitc)

  Wenn der JIT-Compiler nicht aktiv ist, wird folgende Nachricht angezeigt:

      (JIT disabled)

  ## Native Method Interface und Java Native Interface

  IBM unterstützt Native Method Interface in diesem Release nicht. Diese Schnittstelle dürfen Sie in Ihren Anwendungen nicht verwenden.

  Java Native Interface (JNI) ist in Runtime Environment enthalten. Weitere Informationen zur Verwendung von JNI finden Sie auf der folgenden Sun-Website: http://java.sun.com.

  # Konfigurieren von Runtime Environment for Linux

  Nach der Installation von Runtime Environment for Linux müssen Sie Ihr Shellanmeldescript editieren und in der Anweisung PATH folgendes Verzeichnis hinzufügen:

  /opt/IBMJava2-s390-141/jre/bin

  Wenn Sie Runtime Environment for Linux in einem anderen Verzeichnis als im Verzeichnis /opt/IBMJava2-s390-141/ installiert haben, müssen Sie das Verzeichnis /opt/IBMJava2-s390-141/ durch das Verzeichnis ersetzen, in dem Sie Runtime Environment for Linux installiert haben.

  # Deinstallieren von Runtime Environment for Linux

  Der Deinstallationsprozess von Runtime Environment for Linux ist davon abhängig, ob auf Ihrem System das installierbare RPM-Paket (Red Hat Package Manager) oder das komprimierte TAR-Paket (Tape Archive) installiert ist. Anweisungen hierzu finden Sie im Abschnitt Deinstallieren des installierbaren RPM-Pakets (Red Hat Package Manager) oder Deinstallieren des komprimierten TAR-Pakets (Tape Archive).

  ## Deinstallieren des installierbaren RPM-Pakets (Red Hat Package Manager)

  Gehen Sie wie folgt vor, um Runtime Environment for Linux zu deinstallieren, wenn Sie das installierbare RPM-Paket installiert haben:

  1. Geben Sie Folgendes an einer Shelleingabeaufforderung ein:

             rpm -e IBMJava2-JRE-1.4.1

     Sie können auch ein grafisches Tool verwenden, wie beispielsweise kpackage oder yast2.

  2. Entfernen Sie das Verzeichnis, in dem Sie Runtime Environment installiert haben, aus der Anweisung PATH.

  ## Deinstallieren des komprimierten TAR-Pakets (Tape Archive)

  Gehen Sie wie folgt vor, um Runtime Environment for Linux zu deinstallieren, wenn Sie das komprimierte TAR-Paket installiert haben:

  1. Entfernen Sie die Runtime Environment-Dateien aus dem Verzeichnis, in dem Sie Runtime Environment installiert haben.

  2. Entfernen Sie das Verzeichnis, in dem Sie Runtime Environment installiert haben, aus der Anweisung PATH.

  # Starten einer Java-Anwendung

  Mit dem Tool java wird eine Java-Anwendung gestartet.

  JVM sucht die Systemstartklasse und andere verwendete Klassen in den drei folgenden Positionsgruppen: im Klassenpfad des Bootprogramms, in den installierten Erweiterungen und im Benutzerklassenpfad. Argumente, die auf den Klassennamen oder den Namen der JAR-Datei folgen, werden an die Funktion "main" weitergegeben.

  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.

  ## Befehle im Überblick

  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 Datei mit der Erweiterung 'jar', 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.

  ### 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 (.). Siehe auch den Abschnitt Arbeiten mit Klassenpfaden.

    -help oder -?

      Zeigt einen Benutzungshinweis an.

    -showversion

      Zeigt die Produktversion an und setzt den Vorgang fort.

    -verbose[:class | gc | jni]

      Aktiviert die ausführliche Ausgabe.

    -version

      Zeigt die Produktversion an.

    -X

      Zeigt Hilfe für vom Standard abweichende Optionen an.

  ### Vom Standard abweichende Optionen

  Bei den unten aufgelisteten Optionen -X handelt es sich um eine Untergruppe der verfügbaren Optionen. Sie weichen vom Standard ab und können jederzeit ohne vorherige Ankündigung geändert werden.

    -Xargencoding

      Mit dieser Option können die Optionen des Befehls java Unicode-Escapezeichenfolgen verwenden, um Zeichen darzustellen, die sich nicht im Zeichensatz der Ländereinstellung befinden. Unicode-Escapezeichenfolgen weisen das Format \u#### auf. Dabei ist # eine Hexadezimalziffer.

    -Xbootclasspath:<durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>

      Definiert den Suchpfad für Bootklassen und -ressourcen. Zum Definieren des Bootklassenpfads gibt es andere Möglichkeiten. Siehe den Abschnitt Arbeiten mit dem Merkmal 'bootclasspath'. |Implementieren Sie keine Anwendungen, bei denen mit dieser Option |eine Klasse in den Dateien core.jar, graphics.jar, |server.jar, security.jar, xml.jar, tools.jar oder |charsets.jar überschrieben wird, da eine solche Implementierung gegen |die Java 2 Runtime Environment-Binärcodelizenz verstoßen würde.

    -Xbootclasspath/a:<durch ; getrennte Verzeichnisse und ZIP- oder JAR-Dateien>

      Fügt an das Ende des Bootklassenpfads an.

    |-Xbootclasspath/p:<durch ; getrennte |Verzeichnisse und ZIP- oder JAR-Dateien> |

      |Fügt vor dem Klassenpfad des Bootprogramms ein. Implementieren Sie keine Anwendungen, bei denen mit dieser Option |eine Klasse in den Dateien core.jar, graphics.jar, |server.jar, security.jar, xml.jar, tools.jar oder |charsets.jar überschrieben wird, da eine solche Implementierung gegen |die Java 2 Runtime Environment-Binärcodelizenz verstößt. |

    -Xcheck:jni

      Führt zusätzliche Prüfungen für JNI-Funktionen aus.

    -Xcheck:nabounds

      Führt zusätzliche Prüfungen für JNI-Bereichsoperationen aus.

    -Xdebug

      Startet JVM mit aktiviertem Debugger.

    |-Xdisableexplicitgc |

      |Ändert Aufrufe von System.gc() in `no-op`. |

    -Xdisablejavadump

      Inaktiviert die Java-Speicherauszugsfunktion für abnormale Prozessbeendigung. Wenn der Java-Speicherauszug inaktiviert ist, wird der Speicherauszug für die Beendigung des Systemprozesses ausgeführt. Der Java-Speicherauszug wird empfohlen, wenn ein Fehler im Java-Code auftritt. Wenn Fehler bei Systemkomponenten auftreten, ist es möglicherweise hilfreicher, den normalen Systemspeicherauszug abzurufen.

    |-Xgcpolicy:{optthruput | optavgpause} |

      |Gibt die Einstellung für Garbage Collection an. Die |Standardeinstellung lautet optthruput. Weitere |Informationen finden Sie im Abschnitt Angeben der Garbage |Collection-Richtlinie. |

    -Xms<Größe>

      Definiert die Anfangsgröße des Java-Freispeichers.

    -Xmx<Größe>

      Definiert die Maximalgröße des Java-Freispeichers.

    -Xnoclassgc

      Inaktiviert Garbage Collection für Klassen.

    -Xoss<Größe>

      Definiert die Maximalgröße für den Java-Stack für einen beliebigen Thread.

    -Xquickstart

      |Optimiert die Startzeit von Anwendungen. Wenn Sie diese |Option nicht angeben, wird die ursprüngliche Kompilierung von Methoden mit |einem hohen Optimierungsgrad durchgeführt (dies bedeutet, dass der |JIT-Compiler kritische Methoden nicht erneut kompiliert, da die Methoden |ursprünglich mit einem hohen Optimierungsgrad kompiliert wurden).

    -Xrs

      Reduziert die Verwendung von Betriebssystemsignalen.

    -XrunBibliothekname[: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.
      - -Xrunjdwp[:help] | [:<Option>=<Wert>, ...]
          Lädt Debugbibliotheken, damit das ferne Debugging von Anwendungen unterstützt wird.

    -Xss<Größe>

      Definiert die Maximalgröße für den nativen Stack für einen beliebigen Thread. Weitere Informationen finden Sie im Abschnitt Arbeiten mit der Funktion 'floating stacks'.

    |-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 Y Dateien umgeleitet, von denen jede X |gc-Zyklen mit verboseGC-Ausgaben enthält. Diese Dateien weisen |folgendes Format auf: Dateiname1, Dateiname2 usw.
      |Anmerkung:
        Die Umgebungsvariable IBM_JVM_ST_VERBOSEGC_LOG wurde aus diesem |Release entfernt. |
      |

    -Xverify

      Ermöglicht strengste Prüfungen, die zukünftige Standardwerte vorwegnehmen.

  ## Globalisierung des Befehls 'java'

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

  Sie können beliebige Unicode-Zeichen im Klassennamen und in den Argumenten angeben, indem Sie Java-Escapezeichen verwenden. 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- oder ISO8859_1-Code verschlüsselt sind, verwenden Sie -Xargencoding:utf8 und -Xargencoding:latin.

  Wenn Sie eine andere Ländereinstellung als Englisch verwenden, zeigen die Befehle java und javaw in Runtime Environment übersetzte Ausgabenachrichten an. Diese Nachrichten unterscheiden sich von den Nachrichten in der Version 1.3.1. Sie unterscheiden sich außerdem auf Grund der Ländereinstellung, mit der Java ausgeführt wird. Die detaillierte Fehlerbeschreibung und andere von java zurückgegebene Fehlerinformationen werden in Englisch angezeigt. Fehlerinformationen, die während der Initialisierung zurückgegeben werden, werden in eckigen Klammern angezeigt.

  ## Arbeiten mit Klassenpfaden

  In Runtime Environment können Sie einen Klassennamen als vollständigen Dateinamen mit einem vollständigen Pfad und der Erweiterung .class angeben. In vorherigen Versionen von SDK konnten Sie die Klasse nur in Bezug auf CLASSPATH angeben. Die Erweiterung .class war nicht zulässig. Durch Angabe des vollständigen Dateinamens können Sie eine Java-Anwendung über den Desktop oder über ein Dateistartprogramm starten. Wenn Sie eine Datei mit der Erweiterung .class mit Pfad und Erweiterung angeben, wird der angegebene Pfad in CLASSPATH eingefügt. Beispielsweise entspricht der Befehl `java c:\myapp\thisapp.class` der Angabe `java -classpath c:\myapp thisapp`.

  ## |Signalverarbeitung durch die JVM

  |Wenn ein für die 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 die JVM die |Signalverarbeitung. Wurde das Signal für einen Nicht-Java-Thread |aufgerufen und wurde zuvor mit der Anwendung, mit der die JVM installiert |wurde, eine eigene Routine für das Signal installiert, übernimmt diese |Signalroutine die Steuerung. Ist dies nicht der Fall, wird das Signal |ignoriert (unabhängig davon, ob dies die Standardaktion des Signals |ist).

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

  - |Verarbeitung der Bedingung und Wiederherstellung (falls die |Ausnahmebedingung durch den Anwendungscode verursacht wurde) oder
  - |Beginnen einer Sequenz für einen kontrollierten Systemabschluss. |Dabei werden die folgenden Aktionen ausgeführt: |
    1. |Aufruf der Signalroutine Ihrer Anwendung für dieses Signal
    2. |Ausgabe eines Java-Kernspeicherauszugs, um den JVM-Status am Fehlerpunkt |zu beschreiben
    3. |Aufruf eines beliebigen durch die Anwendung installierten Abbruchhooks
    4. |Ausführen der erforderlichen Bereinigung, damit ein ordnungsgemäßer |Systemabschluss durchgeführt werden kann |
    |

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

  - |Aufruf der Signalroutine Ihrer Anwendung für dieses Signal
  - |Ausführen aller Hooks für das Beenden der Anwendung
  - |Aufruf 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 der JVM verwendete Signale werden für die interne Steuerung |verwendet und führen nicht zur Beendigung der JVM. Das einzige wichtige |Steuerungssignal ist SIGQUIT, durch das ein Java-Kernspeicherauszug generiert |wird.

  ### |Von der JVM verwendete Signale

  |In Tabelle 1 sind die von der JVM verwendeten Signale aufgeführt. |Die Signale wurden 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: Die JVM setzt ein Signal SIGABRT ab, wenn sie |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 der JVM zu Steuerungszwecken verwendet werden. |
  |

  |Tabelle 1. Von der JVM verwendete Signale

  Signalname | Signaltyp | Beschreibung | Inaktiviert durch -Xrs
  --- | --- | --- | ---
  SIGSEGV | Ausnahmebedingung | Falscher Zugriff auf den Speicher (es wurden Daten in einen Speicherbereich geschrieben, auf den nicht zugegriffen werden kann). | Nein
  SIGILL | Ausnahmebedingung | Nicht zulässige Anweisung (es wurde versucht, eine unbekannte Maschineninstruktion aufzurufen). | Nein
  SIGFPE | Ausnahmebedingung | Ausnahmebedingung bei der Gleitkommaverarbeitung (Division durch Null). | Nein
  SIGBUS | Ausnahmebedingung | Busfehler (es wurde versucht, eine nicht vorhandene Speicherposition anzugeben). | Ja
  SIGSYS | Ausnahmebedingung | Es wurde ein ungültiger Systemaufruf abgesetzt. | Ja
  SIGXCPU | Ausnahmebedingung | Das CPU-Zeitlimit wurde überschritten (die Ausführung eines Vorgangs dauerte zu lange). | Ja
  SIGXFSZ | Ausnahmebedingung | Der Grenzwert für die Dateigröße wurde überschritten. | Ja
  SIGABRT | Fehler | Abnormale Beendigung. Die JVM setzt dieses Signal ab, sobald sie einen JVM-Fehler feststellt. | Ja
  SIGINT | Interrupt | Interaktiver Abruf (Strg-C). Die JVM wird normal beendet. | Ja
  SIGTERM | Interrupt | Beendigungsanforderung. Die JVM wird normal beendet. | Ja
  SIGHUP | Interrupt | Auflegen. Die JVM wird normal beendet. | Ja
  SIGUSR1 | Steuerzeichen | Benutzerdefiniert. Es wird von einigen JVMs für die interne Steuerung verwendet. | Nein
  SIGUSR2 | Steuerzeichen | Benutzerdefiniert. Es wird von einigen JVMs für die interne Steuerung verwendet. | Nein
  SIGQUIT | Steuerzeichen | Ein Beendigungssignal für ein Terminal. JVM verwendet dieses Signal zum Ausführen von Java-Kernspeicherauszügen. | Ja
  SIGTRAP | Steuerzeichen | Ein internes Signal für die Verwendung durch dbx oder ptrace. Dieses Signal wird von einigen JVMs für die interne Steuerung verwendet. | Ja
  SIGPIPE | Steuerzeichen | Schreibvorgang in eine Pipe, aus der keine Daten gelesen werden. JVM ignoriert dies. | Nein

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

  |Die Signale `1 (SIGHUP)`, `2 (SIGINT)`, `4 |(SIGILL)`, `6 (SIGABRT)`, `7 (SIGEMT)`, `8 |(SIGFPE)`, `10 (SIGBUS)`, `11 (SIGSEGV)`, `12 |(SIGSYS)`, `15 (SIGTERM)` und `24 (SIGXCPU)` führen |dazu, dass die JVM beendet wird. Daher sollte eine |Anwendungssignalroutine bei diesen Signalen keine Wiederherstellung versuchen, |es sei denn, die Services der JVM werden nicht mehr benötigt.

  ### |Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek

  |Die JVM von IBM 31-bit Runtime Environment for Linux on zSeries, Java 2 |Technology Edition, Version 1.4.1 enthält eine neue |Signalverkettungsfunktion. Die Signalverkettung ermöglicht eine |effizientere Interaktion der JVM mit nativem Code, über den eigene |Signalroutinen installiert werden.

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

  |Führen Sie die folgenden Schritte aus, um libjsig.so zu |verwenden: |

  - |Stellen Sie eine Verbindung zu der Anwendung her, die eine JVM erstellt |oder integriert:

        |gcc -L <Verzeichnis von libjvm.so> -ljsig -ljvm java_application.c

    |oder

  - |Verwenden Sie die Umgebungsvariable LD_PRELOAD:

        |export LD_PRELOAD=<Verzeichnis von libjsig.so>/libjsig.so; java_application (ksh)
        |
        |setenv LD_PRELOAD <Verzeichnis von libjsig.so>/libjsig.so; java_application (csh)

    |

  |Wenn Sie Signalroutinen installieren, die `sigaction()` verwenden, |werden einige sa_flags nicht überwacht, wenn die JVM das Signal |verwendet. Dabei handelt es sich um folgende Markierungen: |

  - |SA_NOCLDSTOP - Diese Option ist niemals festgelegt.
  - |SA_NOCLDWAIT - Diese Option ist niemals festgelegt.
  - |SA_RESTART - Wird in jedem Fall definiert.
  - |SA_ONSTACK - Wird in jedem Fall definiert (nur SIGSEGV). |

  |Die Bibliothek libjsig.so verdeckt auch JVM-Signalroutinen vor der |Anwendung. Daher geben Aufrufe wie `signal()`, |`sigset()` und `sigaction()`, die nach dem Starten der JVM |ausgeführt werden, keinen Verweis mehr auf die JVM-Signalroutine sondern auf |eine beliebige vor dem Starten der JVM installierte Routine |zurück.

  ## Arbeiten mit dem Merkmal 'bootclasspath'

  Sie können das Systemmerkmal ibm.jvm.bootclasspath mit der im Abschnitt Starten einer Java-Anwendung beschriebenen Option -D festlegen. Der Wert dieses Merkmals wird als zusätzlicher Suchpfad verwendet und kann zwischen die Werte eingefügt werden, die durch -Xbootclasspath/p: und den Klassenpfad des Bootprogramms definiert werden. Der Klassenpfad des Bootprogramms ist entweder der Standardpfad oder der über die Option -Xbootclasspath: definierte Pfad.

  ## Angeben der Garbage Collection-Richtlinie

  Die JVM-Laufzeitoption -Xgcpolicy gibt die Garbage Collection-Richtlinie an.

  -Xgcpolicy kann zwei Werte annehmen: optthruput (Standardwert) und optavgpause. 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

  und

  > -Xgcpolicy:optavgpause

  ### Pausezeit

  Wenn eine Anwendung wegen des verfügbaren Freispeichers nicht sofort ein Objekt erstellen kann, ist die Garbage Collection 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 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

  Die Option optavgpause verringert die Zeit dieser Garbage Collection-Pausen beträchtlich. Außerdem wird der Effekt eines höheren Freispeicherumfangs während der Garbage Collection-Pause begrenzt. Bei Konfigurationen mit großen Freispeichern ist diese Option besonders wichtig. Die Pausezeiten werden dadurch verringert, dass einige Garbage Collection-Aktivitäten gleichzeitig mit der normalen Programmausführung ausgeführt werden. Außer der Pausezeit wird je nach Anwendung möglicherweise auch der Anwendungsdurchsatz verringert.

  ### Umgebungen mit sehr vollen Freispeichern

  Wenn der Java-Freispeicher nahezu voll ist und wenn 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. In diesen Situationen sollten Sie entweder die Freispeichergröße mit der Option -Xmx erhöhen oder die Anzahl der verwendeten Anwendungsobjekte verringern.

  ### Weitere Informationen zu Garbage Collection

  Detaillierte Informationen zu Garbage Collection finden Sie unter folgenden Adressen:

  http://www.ibm.com/developerworks/ibm/library/i-garbage1/

  http://www.ibm.com/developerworks/ibm/library/i-garbage2/

  http://www.ibm.com/developerworks/ibm/library/i-garbage3/

  |Weitere Informationen zum Speicherverlust in Java-Anwendungen finden |Sie unter folgender Adresse: http://www.ibm.com/developerworks/library/j-leaks/index.html.

  # Abrufen der IBM Build- und Versionsnummer

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

  `java -version`

  # Verwenden der Funktion 'floating stacks'

  Auf einem Linux-System ohne aktivierter Funktion "floating stacks" wird unabhängig von der Einstellung für -Xss eine Minimalgröße von 256 KB für native Stacks für die einzelnen Threads bereitgestellt. Auf einem Linux-System mit aktivierter Funktion "floating stacks" werden die Werte für -Xss berücksichtigt. Wenn Sie also ein Linux-System ohne aktivierter Funktion "floating stacks" migrieren, müssen alle Werte für -Xss groß genug sein, und es darf kein Minimum von 256 KB erforderlich sein.

  # Ändern der Eingabemethode in DBCS-Sprachen

  Wenn Sie die Eingabemethode ändern möchten, sollten Sie auf DBCS-Systemen (Double-Byte Character Set, Doppelbytezeichensatz) die Klasse java.util.prefs.Preferences und nicht die Umgebungsvariablen IBMJAVA_INPUTMETHOD_SWITCHKEY und IBMJAVA_INPUTMETHOD_SWITCHKEY_MODIFIERS verwenden. Weitere Informationen hierzu finden Sie im Handbuch Input Method Framework Specification von Sun.

  # Beispiel für Laufzeit-Software

  Auf der Website von Sun, http://java.sun.com, finden Sie ein Beispiel "Hello World", das Sie herunterladen können. Dieses Beispiel zeigt, wie Sie eine einfache Java-Anwendung erstellen können, die mit Runtime Environment ausgeführt wird.

  # Installieren Ihrer Anwendung auf dem System eines Benutzers

  Wenn Sie das Produkt entwickelt haben und für die Auslieferung bereit sind, müssen Sie das Produkt auf dem System eines Benutzers installieren, das System des Benutzers zur Unterstützung Ihrer Software sowie die Laufzeitumgebung konfigurieren.

  Wenn Sie Runtime Environment for Linux verwenden, müssen Sie sicherstellen, dass Ihr Installationsverfahren keine vorhandene Installation überschreibt (es sei denn, die vorhandene Version von Runtime Environment for Linux ist eine ältere Version).

  Zum erneuten Verteilen von Runtime Environment for Linux können Sie es auf Ihrem eigenen System installieren und anschließend die erforderlichen Runtime Environment-Dateien in Ihr Installationspaket kopieren. Wenn Sie diese Methode wählen, müssen Sie alle mit Runtime Environment for Linux zur Verfügung gestellten Dateien berücksichtigen. Die Software von Runtime Environment for Linux kann nur erneut verteilt werden, wenn alle Dateien enthalten sind. Wenn Sie die Anwendung verteilt haben, hat sie dadurch eine eigene Kopie von Runtime Environment for Linux.

  Weitere Informationen zu den Dateien, die erneut verteilt werden müssen, finden Sie in der Lizenzvereinbarung, die im Lieferumfang dieses Produkts enthalten ist.

  # Bekannte Einschränkungen

  In den folgenden Abschnitten werden bekannte Einschränkungen von SDK for Linux erläutert.

  - |Wenn Sie viele gleichzeitig ablaufende Threads ausführen, wird |möglicherweise eine Warnung angezeigt: |`java.lang.OutOfMemoryError`. Es handelt sich |dabei um eine Meldung, dass nicht genügend Systemressourcen zur Verfügung |stehen und Nachrichten aus folgenden Gründen angezeigt werden können: |
    1. |Neue Threads können aus folgenden Gründen nicht erstellt werden: |
       - |Die Anzahl der erstellten Prozesse überschreitet den für den Benutzer |festgelegten Grenzwert.
         |

         |

       - |Es stehen nicht genügend Systemressourcen zum Erstellen neuer Threads zur |Verfügung. In diesem Fall werden möglicherweise weitere |Java-Ausnahmebedingungen angezeigt, abhängig davon, welche Operationen Ihre |Anwendung ausführt. |
       |

       |

    2. |Der Kernel-Speicher bietet entweder nicht genügend Kapazität oder ist |fragmentiert. Im Verzeichnis /var/log/messages finden Sie |entsprechenden Kernel-Nachrichten, die darauf hinweisen, dass nicht genügend |Speicher vorhanden ist, und die die ID des mit dem Befehl 'kill' |beendeten Prozesses aufweisen.
       |

       |

    Versuchen Sie, Ihr System dahingehend zu optimieren, dass die |entsprechenden Systemressourcen erhöht werden.
    |
  - Wenn Sie bereits eine frühere Version dieses Produkts installiert haben, das von Red Hat verteilt wurde, berichtet Red Hat Package Manager (RPM), dass das IBM-Paket älter als alle Versionen der Red Hat Distribution ist. Diese Situation tritt ein, weil Red Hat dem RPM-Paket eine "Seriennummer" hinzufügt, die das Schema zur Versionssteuerung des Produkts im Paket außer Kraft setzt. Standardmäßig verweigert RPM die Installation eines Pakets, das älter als das bereits installierte Paket zu sein scheint. Die Option --oldpackage des Befehls rpm ermöglicht die Installation des neuen IBM-Pakets.

  - Wenn Sie die Audiofunktion auf einer Maschine ohne Audiokarte verwenden, wird möglicherweise die Fehlernachricht angezeigt, dass nicht genügend Speicher vorhanden ist, wenn Java versucht, einen Ton wiederzugeben. Die Nachricht wird in der Konsole angezeigt, sie hat jedoch keine Auswirkungen auf die Java-Anwendung.

  - Möglicherweise können Sie bei Verwendung von KDE (K Desktop Environment) keine DBCS-Daten (Double Byte Character Set, Doppelbytezeichensatz) über die Systemzwischenablage zwischen Linux-Anwendungen und Java-Anwendungen kopieren.

  - SDK implementiert Java-Threads als native Threads, wodurch jeder Thread zu einem separaten Linux-Prozess wird. Wenn die Anzahl der Java-Threads die maximal zulässige Anzahl an Prozessen überschreitet, empfängt Ihr Programm möglicherweise eine Fehlernachricht, einen SIGSEGV-Fehler, oder Ihr System blockiert möglicherweise.

    Die maximale Anzahl der verfügbaren Threads wird durch das Minimum für die folgenden Werte bestimmt:

    - Die Einstellung für die Benutzerprozesse (ulimit -u) in /etc/security/limits.conf
    - |Die in /proc/sys/kernel/threads_max definierte Begrenzung
    - Die in libpthreads.so definierte Begrenzung PTHREAD_THREADS_MAX (bei Änderungen muss der Linux-Kernel erneut kompiliert werden)

    Bevor die maximale Anzahl an Threads erreicht wird, kann jedoch der virtuelle Speicher voll sein.

  - Wenn Sie eine Java-Anwendung mit Ctrl-C beendet haben, bleiben einige Prozesse möglicherweise verwaist.

  - Wenn das Programm javap an einer Schnittstelle ausgeführt wird, dupliziert es im Ergebnis die Zeichenfolge "interface". Wenn beispielsweise javap an der Schnittstelle "java.lang.Runnable" ausgeführt wird, wird Folgendes generiert:

        public interface interface java.lang.Runnable extends java.lang.Object...

  - Die vollständige Anzeige von Dialogfenstern, die mit Swing erstellt wurden, kann sich um einige Sekunden verzögern.

  - Die Ergebnisse von Tastenkombinationen mit der Taste ALT weichen bei Verwendung verschiedener Window Manager unter Linux ab. Sie weichen auch von Ergebnissen anderer Betriebssysteme ab. Im Window Manager "Enlightenment" generieren die Tastenkombinationen Alt+A und Umschalt+Alt+A verschiedene Änderungswerte, und Strg+Alt+A erzeugt kein Ereignis. Bei Verwendung des Window Managers "WindowMaker" erzeugt die Tastenkombination Strg+Alt+A jedoch ein Tastenereignis.

  - Auf einem Linux-System mit X Window ist die Tastenbelegung wie folgt festgelegt: 64 0xffe9 (Alt_L) 0xffe7 (Meta_L) und 113 0xffea (Alt_R) 0xffe8 (Meta_R). Dies können Sie überprüfen, indem Sie an einer Shelleingabeaufforderung den folgenden Befehl eingeben:

        xmodmap -pk

    Daher erwartet SDK, dass Meta zusammen mit Alt gedrückt wird. Sie können dies umgehen und die Meta_x-Zuordnung entfernen, indem Sie Folgendes an der Shelleingabeaufforderung eingeben:

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

    Anmerkung:
      Diese Lösung kann sich auf andere X-Windows-Anwendungen auswirken, die über dieselbe Anzeige ausgeführt werden, wenn die Meta-Tastenkombination verwendet wird, die Sie zuvor entfernt haben.

  - Das Erstellen von besonders langen DSA-Schlüsselpaaren kann auf langsamen Maschinen sehr lange dauern. Interpretieren Sie die Verzögerung nicht als Blockierung, weil der Prozess nach ausreichender Zeit beendet 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.

  - |Die meisten neuen E/A-Einschränkungen (NIO - new I/O) aus Version |1.4.0 wurden entfernt. Nur die folgende Beschränkung ist |weiterhin gültig:
    |

    |Tabelle 2. Neue E/A-Einschränkungen

    Sun-Programmfehlernummer | Kurzbeschreibung der Einschränkung
    --- | ---
    4696508 | Selektor synchronisiert nicht wie angegeben.

    |

  - Mit nativen Programmen kann keine JVM der Version 1.1 erstellt werden. Es ist nicht möglich, JNI_CreateJavaVM() aufzurufen und eine Version von JNI_VERSION_1_1(0x00010001) weiterzuleiten. Die folgenden Versionen können weitergeleitet werden:
    - JNI_VERSION_1_2(0x00010002)
    - JNI_VERSION_1_4(0x00010004)

    |Bei der JVM, die in jedem Fall erstellt wurde, handelt es sich um |diejenige, die über die Bibliotheken angegeben wird |(1.2.2., 1.3.x, 1.4.x) und |nicht um diejenige, die über die JNI-Schnittstelle festgelegt wird. Die |Schnittstellen-API hat keine Auswirkungen auf die Angabe der Sprache, die |durch die JVM, die Klassenbibliotheks-APIs oder andere Bereiche des |JVM-Verhaltens implementiert wird. Die Schnittstellen-API gibt nur an, |wie nativer Code das angeforderte Verhalten aufrufen kann.

  - Obwohl der Linux-Kernel in den aktuellen Verteilungen Unterstützung für Internet Protocol Version 6 (IP6) bietet, treten bei der Verwendung möglicherweise Probleme auf. In diesem Release ist die Unterstützung für IP6 durch Java enthalten. Es wird allerdings empfohlen, dass Sie diese Unterstützung mit der Option -Djava.net.preferIPv4Stack=true des Befehls Java inaktivieren. Wenn Sie einen Kernel installieren, der IP6 vollständig unterstützt, benötigen Sie diese Option nicht.

  Die folgenden Einschränkungen gelten nur für Benutzer der Version in traditionellem Chinesisch.

  - Die Funktionstasten, wie die Eingabetaste, die Leertaste, die Rückschritt-Taste und die Taste Esc funktionieren nicht ordnungsgemäß, wenn zum Eingeben der TCH-Zeichen die IMEs LinYi ZhuYin, YiTian ZhuYin und Bosham verwendet werden. Mit der Eingabetaste wird eine neue Zeile eingefügt, die Taste Esc wird zum Abbrechen der zuvor editierten Zeichenfolgen oder des Kandidatenfensters verwendet, und mit der Leertaste wird ein Leerzeichen eingefügt. Nachdem die Taste zum Festschreiben gedrückt wurde, sollte das Kandidatenfenster nicht mehr angezeigt werden. Es sollte außerdem nicht angezeigt werden, wenn Sie die Rückschritt-Taste drücken, während Sie für die Eingabe von Zeichen in traditionellem Chinesisch die IMEs LinYi ZhuYin, YiTian ZhuYin und Bosham verwenden.

  # Bemerkungen

  Die vorliegenden Informationen wurden für Produkte und Services entwickelt, die auf dem US-amerikanischen 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 Dienstleistungen von IBM verwendet werden können. Anstelle der IBM Produkte, Programme oder Dienstleistungen können auch andere ihnen äquivalente Produkte, Programme oder Dienstleistungen verwendet werden, solange diese keine gewerblichen 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. Lizenzanfragen sind schriftlich an IBM Europe, Director of Licensing, 92066 Paris La Defense Cedex, France zu richten. Anfragen an obige Adresse müssen auf Englisch formuliert werden.

  Trotz sorgfältiger Bearbeitung können technische Ungenauigkeiten oder Druckfehler in dieser Veröffentlichung nicht ausgeschlossen werden. IBM kann jederzeit ohne Vorankündigung Verbesserungen und/oder Änderungen an den in dieser Veröffentlichung beschriebenen Produkten und/oder Programmen vornehmen.

  Verweise in dieser Veröffentlichung 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 Garantie, 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. Diese Daten stellen deshalb keine Leistungsgarantie dar.

  Informationen über Produkte anderer Hersteller als IBM wurden von den Herstellern dieser Produkte zur Verfügung gestellt, bzw. aus von ihnen veröffentlichten Ankündigungen oder anderen öffentlich zugänglichen Quellen entnommen. IBM hat diese Produkte nicht getestet und übernimmt im Hinblick auf Produkte anderer Hersteller keine Verantwortung für einwandfreie Funktion, Kompatibilität oder andere Ansprüche. Fragen zu den Leistungsmerkmalen von Produkten anderer Anbieter sind an den jeweiligen Anbieter zu richten.

  ## Marken

  IBM und zSeries sind in gewissen Ländern Marken oder eingetragene Marken 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.

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

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