Allgemeine Aspekte der Portierung
Sie müssen eine Reihe von Problemen berücksichtigen, bevor Sie Java™ -Anwendungen auf 64-Bit-Systeme portieren.
Die Java-Plattform auf 64-Bit-Prozessoren
- Auf 32-Bit-Systemen beträgt der maximale Java-Heapspeicher (wobei Java-Objekte zur Laufzeit gehalten werden) 4GBoder 2GB auf 31-Bit-Systemen mit z/OS® , während 64-Bit-Systeme Heapspeicher bis zu 32GBaufweisen können. Dieser größere Heapspeicher ist für Java-Anwendungen unerlässlich, um die volle Funktionalität großer, leistungsfähiger Systeme nutzen zu können.
- Einige Java-Anwendungen verwenden nativen Code über das JNI (Java Native Interface), wobei der native Code 64-Bit ist. Der Treiber für Java Database Connectivity (JDBC) ist beispielsweise im nativen 64-Bit-Code auf einer 64-Bit-Plattform geschrieben.
- Einige Java-Anwendungen erfordern andere verbesserte Funktionen von 64-Bit-Systemen.
Java-API und nativen Code portieren

Das vorherige Diagramm ist hilfreich, um wichtige Komponenten zu identifizieren und zu verstehen, was geändert werden muss, wenn Anwendungen von 32-Bit auf 64-Bit portiert werden. Alle Java-Anwendungen werden in eine definierte Java-Anwendungsprogrammierschnittstelle (API) geschrieben. Diese API ist für die 32-Bit -und 64-Bit-Versionen der Java-Plattform identisch.
Die Java-API enthält die Java-Klassenbibliothek (z. B. awt, swing, net, lang, iound rmi), die ein grundlegender Bestandteil der Java-Plattform sind. Die Java-API und der gesamte Java-Code sind in einer 64-Bit-Implementierung identisch mit einer 32-Bit -Implementierung. Wenn Sie also Java-Anwendungscode haben, der auf einem 32-Bit -Java-System ausgeführt wird, wird er unverändert auf einem 64-Bit-System ausgeführt.
Viele Java-Anwendungen werden nicht zu 100% in der Programmiersprache Java geschrieben. Für diese Anwendungen ist ein Teil ihres Codes in einer anderen Sprache als Java geschrieben, wie z. B. C oder C + +, die allgemein als "nativer Code" bezeichnet wird. Die Portierung von Java-Anwendungen, die nativen Code haben, erfordert mehr Aufwand.
Der gesamte Java-Code (Anwendung und Klassenbibliotheken) wird von der Java Virtual Machine (Java VM) ausgeführt. Die Java VM enthält Unterkomponenten, die den Java-Code ausführen und die Daten im Java-Heapspeicher verwalten. J9 VM enthält einen Just-in-time-Compiler (JIT), der den Java-Code vor der Ausführung in native Prozessoranweisungen kompiliert. Durch diesen Kompilierungsprozess wird die Leistung des Codes maximiert.
In einer 64-Bit-Implementierung der Java-Umgebung ist es die Java VM, die als 64-Bit-Programm implementiert ist und die die 64-Bit-Natur des zugrunde liegenden Prozessors kennt. Dazu gehört auch der JIT-Compiler, der den Java-Code kompilieren muss, um 64-Bit-Adressen zu verwenden. Der JIT-Compiler kennt auch den vollständigen 64-Bit-Anweisungssatz, der auf dem zugrunde liegenden Prozessor verfügbar ist.
Die Java VM kommuniziert mit dem Betriebssystem über die Host Porting Interface (HPI). Diese Kommunikation macht den Java VM-Code unabhängig vom zugrunde liegenden Betriebssystem und ermöglicht der IBM Implementierung der Java-Plattform die Unterstützung einer Reihe von Betriebssystemen auf einem bestimmten Prozessortyp.
JNI und nativer Code
Die Java VM, die HPI-Schicht und der Java-Code werden in einem einzigen 64-Bit-Betriebssystemprozess ausgeführt. Normalerweise gibt es auch nativen Code, der im selben Prozess ausgeführt wird. Beim nativen Code handelt es sich um mindestens eine Codebibliothek, die direkt für den Prozessor und das Betriebssystem kompiliert wurde. Auf den nativen Code wird vom Java-Code über das JNI (Java Native Interface) zugegriffen. Der native Code kann auch über das JNI auf Java-Objekte und -Methoden zugreifen. Ein nativer Code ist Teil der J2SE -Implementierung, z. B. der Code, der die Java awt -Klassen unter Verwendung der vom Betriebssystem bereitgestellten Grafik-und Fensterfunktionen implementiert. Weiterer nativer Code kann als Teil einer Anwendung bereitgestellt werden.
Es gibt eine andere Schnittstelle, die dem JNI ähnelt: Java Virtual Machine Tool Interface (JVMTI). Diese Schnittstelle stellt Funktionen für die Profilerstellung und das Debugging von Java-Anwendungen bereit. Sie müssen nativen Code schreiben, um diese Funktionalität verwenden zu können.
Bei den 64-Bit-Implementierungen der Java-Plattform muss der gesamte native Code, der der 64-Bit-Java-VM zugeordnet ist, 64-Bit sein, da er alle in demselben Prozessbereich wie die Java-VM ausgeführt wird. Es ist nicht möglich, 64-Bit-Code und 32-Bit -Code innerhalb desselben Prozessbereichs auszuführen, da die Adressgrößen zwischen diesen beiden Codetypen nicht kompatibel sind.
Der native Code, der in der Regel in den Programmiersprachen C oder C++ geschrieben ist, kennt direkt die Größe der Adressen. Wenn Ihre Anwendung nativen Code enthält, muss der native Code so geändert werden, dass er mit den Unterschieden in 64-Bit-Umgebungen, z. B. 64-Bit-Adressen, ordnungsgemäß funktioniert. Schließlich muss der native Code für das 64-Bit-System auch neu kompiliert und neu verbunden werden.
Zusammenfassend lässt sich sagen, dass die 64-Bit-Java-VM-Implementierung auf einem 64-Bit-Prozessor ausgeführt wird und mit Code verknüpft ist, der ebenfalls 64-Bit "sensitiv" ist. Die Java VM kann auch die Unterstützung für großen Speicher und 64-Bit-Anweisungen des zugrunde liegenden Prozessors verwenden. Die Java-Anwendungen, die ausgeführt werden, sind mit denen identisch, die in 32 -Bit- -Implementierungen von Java ausgeführt werden können. Nur nativer Code muss von 32 -Bit- -Systemen auf 64-Bit-Systeme portiert werden.
Der Vorteil von Java-Programmen bei der Umstellung von 32-Bit auf 64-Bit
Die Sprache und die Umgebung von Java machen den Übergang von der 32-Bit -Datenverarbeitung zur 64-Bit-Datenverarbeitung einfach. Für Programme, die in anderen Sprachen mit expliziten Adresszeigern wie C und C++ geschrieben wurden, kann die Portierung einer Anwendung von 32 Bit auf 64 Bit einen erheblichen Aufwand erforderlich machen. Dies liegt daran, dass jeder Zeiger als 64-Bit-Wert neu deklariert werden muss und jede Berechnung von Adressen sorgfältig geprüft und angepasst werden muss, um sicherzustellen, dass sie in der 64-Bit-Umgebung ordnungsgemäß ausgeführt wird. Im Gegensatz dazu müssen 100%ige Java-Anwendungen nicht einmal neu kompiliert werden, um in der 64-Bit-Umgebung korrekt zu laufen. Bei Java-Anwendungen wird die gesamte harte Arbeit von der Java-VM-Implementierung ausgeführt, während die zugrunde liegende Zeigergröße ausgeblendet wird.