OpenJ9
Originalautor (en) | IBM |
---|---|
Entwickler (en) | Eclipse Foundation |
Stabile Version | 0,32,0[1] / 22. April 2022 |
Repository | |
Geschrieben in | C, C ++, Java, Montage |
Betriebssystem | Linux, AIX, Fenster, Mac OS, Z/OS, Ibm i |
Typ | Java virtuelle Maschine |
Lizenz | Apache -Lizenz 2.0 GNU Allgemeine öffentliche Lizenz, Version 2 mit die GNU -Klassenpfadausnahme GNU Allgemeine öffentliche Lizenz, Version 2 Mit der OpenJDK -Assembly -Ausnahme[2] |
Webseite | www |
Eclipse OpenJ9 (zuvor bekannt als als IBM J9) ist eine hohe Leistung, skalierbar, Java virtuelle Maschine (JVM) Implementierung, die mit der Spezifikation der Java Virtual Machine vollständig entspricht.[3]
OpenJ9 kann aus der Quelle erstellt werden oder mit vorgebauten Binärdateien verwendet werden Adoptopenjdk Projekt für eine Reihe von Plattformen, einschließlich Linux und Fenster.[4] OpenJ9 ist auch eine Kernkomponente des IBM Developer Kit, das in vielen IBM Middleware -Produkten eingebettet ist, einschließlich WebSphere Application Server und Websphere Liberty. OpenJ9 ist auch ein Bestandteil von Open Liberty.[5]
Umfangreiche Konfigurationsoptionen stellen sicher, dass das JVM abgestimmt werden kann, um die Anforderungen einer Vielzahl von Java-Anwendungen zu erfüllen, von komplexen Unternehmensanwendungen, die auf Mainframe-Hardware ausgeführt werden, bis hin zu kurzlebigen Anwendungen, die auf containerbasierten Cloud-Diensten ausgeführt werden.
Geschichte
OpenJ9 kann seine Wurzeln auf das von Envy/SmallTalk -Produkt zurückverfolgen Object Technology International (OTI). IBM kaufte OTI 1996 für ihre Smalltalk Fachwissen und Produkte. Als die Java -Sprache jedoch als führende Sprache für den Unternehmensmarkt auftrat, wurde die vorhandene SmallTalk -VM stattdessen an die Verarbeitung von Java -Bytecodes angepasst. Der Name J9 entwickelt sich aus der Namenskonvention für den SmallTalk -Quellcode, K8. K → j (ein rückständiger Schritt), weil die Entwickler glaubten, dass SmallTalk besser sei als Java, aber 8 → 9 (ein Vorwärtsschritt) Weil die neue VM besser wäre als zuvor.[6]
Der J9 JVM wurde für viele IBM -Produkte von IBM zur Laufzeit -Motor, wo sie seinen Ruf für hohe Leistung, Skalierbarkeit und Zuverlässigkeit aufgebaut hat.
Im Jahr 2017 wurde J9 ein Eclipse Foundation Projekt unter dem Namen Eclipse OpenJ9. IBM ist weiterhin aktiv in das Projekt involviert und stellt diese Java -VM weiterhin im Kern vieler Softwareangebote. Bei der Eclipse Foundation wird OpenJ9 als Inkubatorprojekt mit der ersten Veröffentlichung V0.8.0 eingestuft, die 2018 geliefert wurde.
Merkmale
Die Eclipse OpenJ9 JVM entspricht der Java JVM -Spezifikation. Die gleiche Version des JVM kann in OpenJDK 8 und späteren Releases verwendet werden, was bedeutet, dass viele Funktionen und Verbesserungen durch Anwendungen genutzt werden können, die auf verschiedenen Versionen von Java ausgeführt werden. Verglichen mit Orakel's Hotspot VM, OpenJ9 setzt eine höhere Startleistung und einen geringeren Speicherverbrauch bei einem ähnlichen Gesamtdurchsatz aus.[7]
Eclipse OpenJ9 Einbettungen Eclipse Omr, die Kernkomponenten für Laufzeit liefert, mit denen Laufzeit für verschiedene Programmiersprachen erstellt werden können. Beim OpenJ9 -Projekt fügt eine zusätzliche Codeschicht die Sprachsemantik hinzu, um eine Laufzeitumgebung für Java -Anwendungen bereitzustellen.[8]
Die Komponenten, aus denen Eclipse OpenJ9 besteht, werden in den folgenden Abschnitten beschrieben:
JIT -Compiler
Das Gerade rechtzeitig (JIT) verbessert die Leistung von Java-Anwendungen durch Zusammenstellen von Plattform-neutraler Java-Bytecode zum Laufzeit in nativen Maschinencode. Nicht jede Methode, die von einer Anwendung aufgerufen wird, wird zusammengestellt. Stattdessen zeichnet OpenJ9 die Anzahl der aufgerufenen Methoden auf und löst die JIT -Zusammenstellung an einem vordefinierten Schwellenwert aus. Der JIT -Compiler erstellt Methoden mit unterschiedlichen Optimierungsebenen: kalt, warm, heiß, Sehr heiß (mit Profilerstellung), oder sengend. Je heißer das Optimierungsniveau ist, desto besser die erwartete Leistung, desto höher ist die Kosten in Bezug auf CPU und Speicher. Die höheren Optimierungsniveaus verwenden spezielle Techniken wie die Fluchtanalyse und eine partielle Redundanzeliminierung oder schleifen Sie mehr Male durch bestimmte Optimierungssequenzen. Obwohl diese Techniken mehr CPU und Speicher verwenden, kann die verbesserte Leistung, die durch die Optimierungen geliefert wird, den Kompromiss lohnt.
AOT -Compiler
Im Voraus (AOT) Zusammenstellung ist ein Mechanismus zur Verbesserung der Startleistung. Methoden werden zur Laufzeit dynamisch in AOT -Code kompiliert, sodass die JVM eine Anwendung schneller starten kann. AOT wird automatisch aktiviert, wenn die Klassendatenfreigabe verwendet wird (-Xshareclasses) und erfordert keine besondere Abstimmung. OpenJ9 wählt automatisch aus, welche Methoden auf der Grundlage von Heuristiken erfasst werden sollen, die die Startphase großer Anwendungen identifizieren. Für kleine oder kurze laufende Anwendungen die -Xtune: virtualisiert Die Option sollte hinzugefügt werden, um das Beste aus dem AOT-kompilierten Code herauszuholen.
Klassendatenfreigabe
Das Teilen von Klassendaten zwischen JVMS hat zwei Hauptvorteile:
- Die Startleistung wird verbessert, indem Klassen platziert werden, die eine Anwendung bei der Initialisierung in einen gemeinsam genutzten Klassen -Cache benötigt.
- Der Speicher Fußabdruck wird reduziert, indem gemeinsame Klassen zwischen Anwendungen geteilt werden, die in separaten Java -VMs ausgeführt werden.
Im Gegensatz zu anderen Implementierungen der Klassendatenfreigabe (CDS) erfordert die Aktivierung der Funktion in OpenJ9 nur einen Schritt: Einstellung -Xshareclasses in der Befehlszeile, wenn Sie Ihre Anwendung starten. Bei der Angabe erstellt OpenJ9 eine Speicherkartierdatei, um die Klassen im Speicher zu speichern und zu teilen. Standardmäßig teilt OpenJ9 immer sowohl die Bootstrap- als auch die Anwendungsklassen, die vom Standard -Systemklassenlader geladen werden. Ein weiterer Vorteil der OpenJ9 -CDS -Implementierung besteht darin, dass der Cache dynamisch aktualisiert wird. Wenn eine Anwendung neue Klassen lädt, speichert das JVM sie automatisch im Cache ohne Benutzerintervention.[9]
OpenJ9 bietet außerdem eine öffentliche Helfer -API für die Integration von Unterstützung für die Klassenfreigabe in benutzerdefinierte Klassenlader sowie mehrere Dienstprogramme für die Verwaltung von aktiven Caches.
Müllsammler
Um zu verhindern, dass Anwendungen, die den Speicher mehr haben, müssen Objekte im Java -Haufen, die nicht mehr benötigt werden, zurückgefordert werden. Dieser Prozess ist als bekannt als Müllsammlung (GC). OpenJ9 bietet eine Reihe von Müllsammlungsrichtlinien, die für verschiedene Arten von Anwendungen und Workloads ausgelegt sind. Die Auswahl der richtigen Richtlinie hängt von den Nutzungs- und Leistungszielen ab. Standardmäßig verwendet OpenJ9 die gleichzeitige Generation (gleichzeitig (-Xgcpolicy: Gencon
) Richtlinie, die am besten für Transaktionsanwendungen geeignet ist, die viele kurzlebige Objekte haben. Alternative Richtlinien sind verfügbar, einschließlich solcher, die Anwendungen mit großen Java -Haufen bedienen (-Xgcpolicy: ausgewogen
), Anwendungen, die empfindlich gegenüber der Reaktionszeit sind (-Xgcpolicy: Metronom
) oder Anwendungen, die einen hohen Anwendungsdurchsatz erfordern (Durchsatz) (-Xgcpolicy: Opthruput
).
Eine Option "Leerlaufsteuer" (-XX:+IdleTuningGcOnIdle
) löst die Müllsammlung in OpenJ9 aus, wenn die Anwendung im Leerlauf ist. Dies reduziert den Speicher Fußabdruck, für einige von Bedeutung Virtuelles Hosting Abrechnungspläne.[7]
JIT -Server
Im Januar 2020 lieferte OpenJ9 eine experimentelle Funktion für JIT -Kompilierung Code außerhalb von JVM und remote auf einem Server.
Diagnosekomponente
OpenJ9 enthält umfangreiche Spuren- und Debugging -Dienstprogramme, um Laufzeitprobleme zu identifizieren, zu isolieren und zu lösen. Verschiedene Arten von diagnostischen Daten werden bei bestimmten Ereignissen automatisch automatisch erstellt, können aber auch aus der Befehlszeile ausgelöst werden. Zu den Datenarten gehören:
- Java Dumps
- Diese werden erzeugt, wenn das JVM aufgrund eines Betriebssystemsignals unerwartet endet. Außerhalb des Speicherfehler Ausnahme oder ein Benutzer -initiierter Tastenanschlag -Kombination. Java -Dumps fassen den Status des JVM zusammen, wenn das Ereignis auftritt, wobei die meisten Informationen zu Komponenten des JVM bezogen werden.
- Heap -Müllkippe
- Heap -Dumps zeigen alle Live -Objekte auf dem Java -Haufen, wenn der JVM aufgrund eines endet Außerhalb des Speicherfehler Ausnahme oder wenn sie von einem Benutzer angefordert werden. Die Informationen enthalten Objektadresse, Typ oder Klassenname, Größe und Verweise auf andere Objekte. Die Analyse von Heap -Dumps kann Ihnen sagen, welche Objekte große Mengen an Speicher auf dem Java -Haufen verwenden und warum diese nicht Müll gesammelt werden.
- System -Dumps
- Oft bekannt als KernpolsterDiese sind plattformspezifisch und enthalten einen rohen binären Dump des Prozessspeichers. Dieser Dump verfügt über eine vollständige Kopie des Java Heap, einschließlich des Inhalts aller Java -Objekte in der Anwendung. OpenJ9 -Tools stehen zur Verarbeitung des Systems in ein lesbares Format zur Analyse zur Verfügung.
- Müllsammlungsdaten
- Um Probleme mit der Müllsammlung zu analysieren, können Sie die ausführliche Protokollierung aktivieren, die Daten zu allen Müllsammlungsvorgängen liefert, einschließlich Initialisierung, Stop-the-World-Verarbeitung, Abschluss, Referenzverarbeitung und Zuordnungsfehler. Für noch detailliertere Analyse können Sie die Verfolgung der Müllsammlung einschalten.
- Spurendaten
- Die OpenJ9 -Trace -Einrichtung kann verwendet werden, um Anwendungen, Java -Methoden oder interne JVM -Operationen mit minimaler Auswirkungen auf die Leistung zu verfolgen.
- JIT -Daten
- Wenn ein allgemeiner Schutz oder ein Abbruchereignis stattfindet, erzeugt die JIT einen kleinen Binärdeponie, der von OpenJ9 -Entwicklern analysiert werden kann, um die Grundursache zu bestimmen.
- Daten der gemeinsam genutzten Klassen
- Die Datenkomponente für gemeinsam genutzte Klassen bietet einige ausführliche Optionen, die zur Laufzeit verwendet werden können, um die Cache -Aktivität anzuzeigen. Das Printstats und printallstats Mit Versorgungsunternehmen können Sie den Inhalt eines gemeinsam genutzten Klassencache analysieren.
Die diagnostische Komponente enthält auch die DTFJ -Anwendungsprogrammierschnittstelle, mit der Diagnosewerkzeuge erstellt werden können. DTFJ arbeitet mit Daten aus einem System -Dump oder einem Java -Dump.
Annahme
-
Adoptopenjdk:Community Builds von OpenJDK mit OpenJ9 werden gebaut und getestet am Adoptopenjdk -Projekt(VERALTET:[10] Übertragen auf IBM als Semeru). - IBM:
- OpenJ9 ist ein Bestandteil der IBM SDK, Java Technology Edition, Version 8.
- Adoptopenjdk OpenJDK mit OpenJ9 Community -Builds werden jetzt gebaut, getestet und verteilt als IBM Semeru.
- Apache OpenWhisk: OpenWhisk verwendet OpenJ9 als JVM für die Aktionen.[11]
- Eclipse IDE: Die Eclipse Foundation hat die Aufnahme von OpenJDK 8 mit OpenJ9 in die Sonnenfinsternis genehmigt Integrierte Entwicklungsumgebung (Ide).
Siehe auch
Verweise
- ^ "Releases · Eclipse/OpenJ9". GitHub. Abgerufen 2022-04-26.
- ^ "OpenJ9/Lizenz bei OpenJ9-0.24.0 · Eclipse/OpenJ9". GitHub. Abgerufen 6. März 2021.
- ^ Leonardo Zanivan (7. Februar 2018). "Neue Open Source JVM optimiert für Cloud und Microservices". Mittel.
- ^ Holger VoormAnd (14. März 2018). "Hallo OpenJ9 unter Windows, ich habe dich nicht so schnell erwartet!". Dzone.
- ^ David Rubinstein (20. September 2017). "IBM veröffentlichen WebSphere Liberty Code an Open Source". SD -Zeiten.
- ^ Ronald Diener (18. September 2017). "Wie hat der J9 in OpenJ9 seinen Namen bekommen?". Mittel.
- ^ a b Dan Hedinga (6. Juni 2018). "Eclipse OpenJ9; nicht irgendeine java virtuelle Maschine". Jaxenter.
- ^ Monica Beckwith (1. März 2018). "Eclipse OpenJ9 - Eine Open -Source -Java -Virtual -Maschine basierend auf dem Eclipse OMR -Projekt". Infoq.
- ^ Corrie, Ben; Shao, Hang (6. Juni 2018). "Klassenfreigabe in Eclipse OpenJ9". IBM Developerworks.
- ^ , Static/178d962fdbafec7cd7d414606b72a2fc/56ED0/TSC JPG 2x "/> <img ladern =" lazy "width =" 30 "Höhe =" 30 ";Oben: 0; links: 0; Deckkraft: 1; Breite: 100%; Höhe: 100%; Objekt-Fit: Cover; Objektposition: Mitte "/> </picture>, static/178d962fdbafec7cd7d414606b72a2fc/56ed0/TSC JPG 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x"Src ="/static/178d962fdbafec7CD7D414606B72A2FC/58A4B/TSC JPG "Alt =" ". "Adoptopenjdk, um sich der Eclipse Foundation anzuschließen". blog.adoptopenjdk.net. Abgerufen 2021-12-21.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Parameswaran Selvam (9. März 2018). "Apache OpenWhisk Java -Aktionen auf Eclipse OpenJ9 Runtime". Mittel.
Externe Links
- Offizielle Website
- Eclipse Foundation OpenJ9 Projektseite
- OpenJ9 an GitHub
- OpenJ9 Blog
- Ubicomp: Hacking: Java: J9 bei Universität von Washington Informatik und Ingenieurwesen