WikiDer > Java virtuelle Maschine
EIN Java virtuelle Maschine entweder JVM ist eine plattformübergreifende Umgebung zum Laufen JavaByte-Code. Das bekannteste Beispiel dafür ist Java-Code, der zu Java-Bytecode kompiliert wurde, aber auch Sprachen wie Reichweite, Clojure und Groovig Code erzeugen, der auf der JVM ausgeführt werden kann. Die JVM selbst übernimmt die Speicherverwaltung, Laufzeitoptimierung und Müllabfuhr. Dies muss der Entwickler bei der Entwicklung einer Anwendung nicht berücksichtigen. Auch die unterschiedlichen möglichen Systeme, auf denen die Anwendung läuft, sind für den Entwickler kein Thema mehr, denn es gibt nur ein System: die JVM.
Plattformunabhängigkeit
Das plattformübergreifende Konzept von Java wird durch die Übersetzung (Kompilierung) des Java-Quellcodes in Bytecode erreicht. Dieser Bytecode kann auf jedem platziert werden Betriebssystem für die eine JVM verfügbar ist, wird ausgeführt. Daher ist jedes Java-Programm konzeptionell nur für eine Plattform geschrieben: die JVM. Dieses Konzept ist sehr alt: In den 1970er Jahren gab es es P-Code-Mechanismus, bei welchem Pascal-Programm's wurden in P-Code übersetzt. Ein P-Code-Interpreter wurde dann benötigt, um die Programme auszuführen. Auch die alten MicrosoftBASICInterpreter übersetzen ihren BASIC-Code zunächst in eine Zwischensprache, um die Ausführung zu beschleunigen.
Virtuelle Maschine
Konzeptionell ist die JVM eine echte Computer, nur nicht aufgeführt in Hardware-. Die Maschine hat Speicherkapazität, ihr eigenes Speichermodell, ein bestimmtes Verhalten ihrer Rechnungseinheit und ein internes Maschinensprache. Auch die Grundmaschine ist konzeptionell mit neuen Möglichkeiten und Modulen erweiterbar, die Klassen, APIs und dergleichen - zubereitet in Byte-Code. Bekannte Erweiterungen der Maschine betreffen die Netzwerkkommunikation (java.io- und java.net-Pakete, konzeptionell zusammen als Netzwerkkarte für die Maschine) und die APIs, die auf kleine Geräte abzielen (J2MEErweiterungen).
Dolmetscher
Eine direkte Folge der Verwendung der Modell der virtuellen Maschine ausführen Computer ProgrammDas Problem ist, dass die Ausführung jedes Programms einen zusätzlichen Übersetzungsschritt erfordert, verglichen mit einem Programm, das direkt zusammengestellt wird in die Maschinensprache der zugrunde liegenden Hardware umgewandelt. Beide Modelle haben eine Kompilierung in Maschinensprache (Hardwaresprache oder Maschinensprache für die JVM), aber die JVM muss dann auch ihre interne Maschinensprache in die Maschinensprache der zugrunde liegenden Hardware übersetzen. Das bedeutet, dass es immer irgendwo einen Geschwindigkeitsunterschied bei der Ausführung eines Programms auf einer JVM im Vergleich zur Ausführung direkt auf der Hardware gibt.
Popularität
Die JVM ist jedoch eine sehr beliebte virtuelle Maschine, die zu einer beliebten Plattform gehört, die ebenfalls in allen möglichen Bereichen boomt. Dies war entscheidend für die Entwicklung aller Arten von Techniken und Tricks, um die Programmausführung in einer virtuellen Maschine zu beschleunigen. Speziell für die JVM, seit ihrer ersten Existenz als Dolmetscher, wurde weiterentwickelt zu einem Just-In-Time-Compiler - eine Maschine, die große Codeblöcke vorkompiliert und sie vorkompiliert im stores Arbeitsspeicher und in a Zwischenspeicher um Übersetzungsarbeit zu sparen. Darüber hinaus ist die Maschine mit Modulen für länger laufende Programme ausgestattet (ein typisches Verhalten von Serverprogramm's) passen Sie die übersetzte Version des Programms an die Laufzeitnutzung dieses Programms an. Dies ermöglicht oft Optimierungen, die in einem "normalen" kompilierten Programm nicht möglich sind, da in der Endanwendung keine Möglichkeit mehr besteht, in die Erstellung der vollständigen Übersetzung des Programms einzugreifen.
Verwenden Sie JVM für andere Sprachen
Traditionell war die JVM dafür gedacht, Programme auszuführen, die in der Programmiersprache Java. Da viel Forschung in die Optimierung der Geschwindigkeit investiert wurde, ist die richtige Funktion des Garbage Collectors die Kombination einer virtuellen Maschine mit einem großen, bewährten Standard Laufzeitklassenbibliothek wie es sich für eine JVM gehört, hat sich für die Hersteller von (Laufzeitsystemen für) andere Programmiersprachen als sehr attraktiv erwiesen. Es gibt beispielsweise Compiler für alle Arten von Sprachen, die in Bytecode übersetzen, um die Plattformunabhängigkeit und/oder Klassenbibliothek der JVM zu nutzen. Es gibt auch Versionen von Dolmetschern für Skriptsprachen (wie z Reichweite, Rubin und Python) und Systeme (wie Macromedia Flex), die vollständig in die JVM integriert sind. Als Ergebnis ist die JVM zu einem Ebenbild des .GERADEPlattform im Hinblick auf die Offenheit für eine Vielzahl von Programmiersprachen.
Architektur der JVM
Die Architektur der JVM basiert auf a Stapel. Dies steht im Gegensatz zu Architekturen, die auf registriert, wie die meisten Hardware. Ein Programm für die JVM ist a Klassendatei und besteht aus sogenannten Byte-Codes (daher der Name Byte-Code). Jeder Bytecode enthält die auszuführende Anweisung und die Argumente, auf denen diese Anweisung ausgeführt werden soll. Dieser Bytecode ist der Maschinensprache für einen normalen Computer sehr ähnlich.
Ein Unterschied zwischen der JVM und „echten“ Computern besteht darin, dass die JVM keine direkte Adressierung des Speichers zulässt. Stattdessen funktionieren alle Anweisungen auf dem Stapel und auf Objekten.
Die JVM unterteilt den einem Programm zur Verfügung stehenden Speicher in vier Teile:
- Ein Abschnitt für Klassen (Klassenbereich).
- Speichert Informationen, die von allen Objekten derselben Klasse gemeinsam genutzt werden, z. B. Code (von Methoden) und Konstanten. Vor Java 8 wurde dieser Raum PermGen genannt und hatte eine feste Größe. In Java 8 wurde dies jedoch durch den MetaSpace ersetzt. Ein neues System, das automatisch die Größe ändert.
- Ein Stapel
- Es wird zum Speichern von Argumenten während Methodenaufrufen, zum Speichern von Methodenrückgabewerten und Zwischenergebnissen von Berechnungen verwendet.
- EIN Haufen
- Alle Objekte werden hier gespeichert. Objekte, die freigegeben werden, werden im Laufe der Zeit aufgeräumt bis zum Müllsammler.
- EIN gebürtig Stapel
- Dieser Stack wird zum Aufrufen verwendet gebürtig (nicht in Java implementiert) Funktionen.
Verfügbarkeit
Eine JVM ist für fast alle Betriebssysteme verfügbar, einschließlich Fenster, Mac OS X, Linux, Unix, OS/400 und z/OS.
Quellen, Anmerkungen und/oder Verweise
|