www.wikidata.de-de.nina.az
Die Java Virtual Machine abgekurzt Java VM oder JVM ist der Teil der Java Laufzeitumgebung Java Runtime Environment JRE fur Java Programme der fur die Ausfuhrung des Java Bytecodes verantwortlich ist Hierbei wird im Normalfall jedes gestartete Java Programm in seiner eigenen virtuellen Maschine VM ausgefuhrt Der andere Teil der Java Laufzeitumgebung sind die Java Klassenbibliotheken Java LogoDie JVM dient dabei als Schnittstelle zur Maschine und zum Betriebssystem und ist fur die meisten Plattformen verfugbar z B Linux macOS Palm OS Solaris Windows z OS usw Die JVM ist meist in den Programmiersprachen C oder C geschrieben Die Bestandteile der JVM sind der Klassenlader classloader und resolver die Speicherverwaltung und automatische Speicherbereinigung garbage collection und die Ausfuhrungseinheit execution engine Inhaltsverzeichnis 1 Funktionsprinzip 2 Sicherheitsvorteile 3 Optimierungsverfahren 3 1 Dynamische Optimierung 3 2 Implementierungen in Hardware 4 Abschottung der Threads 5 JVM Sprachen 6 Kompilierung in JavaScript 7 Siehe auch 8 Weblinks 9 EinzelnachweiseFunktionsprinzip BearbeitenVom Java Compiler erzeugter plattformunabhangiger Bytecode wird von einer plattformabhangigen Java Virtual Machine ausgefuhrt Die erzeugten Bytecode Dateien Dateiendung class werden wahrend der Laufzeit in die lokale Maschinensprache ubersetzt Die virtuelle Maschine arbeitet dabei wie ein Interpreter ist jedoch wesentlich schneller da z B keine Syntaxuberprufungen mehr vorgenommen werden mussen Sicherheitsvorteile BearbeitenDie Java Virtual Machine bietet neben der Plattformunabhangigkeit des Bytecodes auch einen Gewinn an Sicherheit Sie uberwacht zur Laufzeit die Ausfuhrung des Programms verhindert also zum Beispiel Pufferuberlaufe welche zu unvorhersehbarem Verhalten wie etwa dem Absturz des Programmes fuhren Im speziellen Fall von Java fallt diese Uberwachung sehr einfach aus da Java nicht direkt Zeiger unterstutzt nur implizit Optimierungsverfahren BearbeitenUm die Ausfuhrungsgeschwindigkeit englisch performance von Java Programmen zu erhohen setzen die meisten Java VMs sogenannte JIT Compiler JITC ein die unmittelbar wahrend des Programmablaufs den Bytecode Just In Time Gerade rechtzeitig oder Gerade zur rechten Zeit dauerhaft in Maschinencode ubersetzen Eine Weiterentwicklung dieses Ansatzes ist der Hotspot Optimizer von Sun welcher mit dynamischer Optimierung arbeitet Dynamische Optimierung Bearbeiten Hauptartikel Dynamische Optimierung Oft ist zum Zeitpunkt der Kompilierung nicht bekannt welche konkrete Eingabe eine Software verarbeiten muss Demzufolge muss die Software mit allen Arten von Eingaben zurechtkommen Die Eingabe wird demnach in Variablen gespeichert Nach dem Start des Programms werden jedoch viele Variablen nicht mehr geandert Folglich sind diese von einem Zeitpunkt kurz nach dem Start an Konstanten Wird nun erst nach diesem Zeitpunkt die Software fur die System Architektur kompiliert dies ist bei Java Hotspot der Fall so konnen diese Konstanten berucksichtigt werden Bestimmte Verzweigungen die nur von solchen Halbkonstanten abhangig sind sind dann fur immer eindeutig und stellen somit kein Risiko fur eine falsche Sprungvorhersage dar Ein solcher Programmcode kann also schneller ablaufen als zu einem fruheren Zeitpunkt kompilierter Code Implementierungen in Hardware Bearbeiten Ausfuhrungen in Hardware sind Java Prozessoren Mikroprozessoren die Java Bytecode als Maschinensprache verwenden Sie konnten sich gegen die schnelle Steigerung der Leistungsfahigkeit von Standard PC und JVM nicht durchsetzen Abschottung der Threads BearbeitenDie Java VM schottet die in ihr laufenden Prozesse vom Betriebssystem ab Green Threads Sie bildet standardmassig Java Threads durch Threads des Betriebssystems ab Nur in Ausnahmefallen erfolgt das Thread Management durch die Java VM Somit ist es auch moglich auf einem Betriebssystem das kein Multithreading unterstutzt eine Java VM mit vollem Funktionsumfang anzubieten Die Java VM hat stets volle und standardkonforme Hoheit uber die Java Threads d h der Programmierer braucht nicht die betriebssystemspezifischen Multi Threading Tasking Processing Eigenschaften zu berucksichtigen und kann sich stets auf die JRE verlassen Nachteil ist dass Probleme die von einem Thread ausgehen seitens des Betriebssystems dem gesamten Prozess zugeordnet werden Gangige Betriebssysteme wie zum Beispiel Linux Windows erlauben Kontrolle uber diese nativen Threads allenfalls uber Software von Drittanbietern wie beispielsweise die mit dem JDK mitgelieferte VisualVM Standardwerkzeuge wie beispielsweise der Windows Taskmanager zeigen Systemthreads jedoch nicht an JVM Sprachen BearbeitenNeben Java gibt es auch andere Sprachen die als Programmiersprachen fur JVM Programme benutzt werden konnen Unter anderem folgende Sprachen konnen auf einer JVM laufen Clojure ein Lisp Dialekt Ceylon Concurnas eine Multi Paradigma Programmiersprache fur nebenlaufige verteilte und reaktive Anwendungen mit Python ahnlicher Syntax Unterstutzung fur GPU Computing und Off Heap Speicherverwaltung 1 2 Erjang ein Erlang Dialekt fur die JVM Free Pascal das auch unter der JVM einen Grossteil der Object Pascal Konstrukte unterstutzt Groovy eine sehr Java nahe statisch wie dynamisch typisierte Programmiersprache JRuby eine annahernd Ruby kompatible Implementierung Jython fruher JPython eine reine Java Implementierung der Programmiersprache Python Nice erganzt Java mit parametrische Typen anonyme Funktionen Multimethoden Tupel und optionale Parameter 3 Scala eine Sprache die Eigenschaften von Java mit funktionaler Programmierung vereint Kotlin eine 2011 vorgestellte Sprache von JetBrains 4 Daneben gibt es eine Reihe von Skripting Sprachen die von Java aus aufrufbar sind Dazu gehort JavaScript mittlerweile standardisiert als ECMAScript mit dem Rhino Interpreter ein Mozilla Projekt bis Version 7 bzw mit dem Nashorn Interpreter ab Version 8 Auch JavaFX enthielt in den Versionen 1 x eine Skripting Sprache vor allem fur grafische Elemente ist aber ab Version 2 0 in pure Java implementiert Kompilierung in JavaScript BearbeitenMit der kontinuierlichen Verbesserung der JavaScript Ausfuhrungsgeschwindigkeit kombiniert mit der verstarkten Nutzung mobiler Gerate deren Webbrowser keine Unterstutzung fur Plugins bereitstellen gibt es Bemuhungen diese Benutzer durch Kompilierung in JavaScript anzusprechen Es ist moglich den Quellcode oder JVM Bytecode nach JavaScript zu kompilieren Die Kompilierung des JVM Bytecodes der fur alle JVM Sprachen universell ist ermoglicht es auf dem bestehenden Compiler der Sprache aufzubauen und Bytecode zu erstellen Die wichtigsten JVM Bytecodes fur JavaScript Compiler sind TeaVM 5 der Compiler im Dragome Web SDK 6 Bck2Brwsr 7 und j2js Compiler 8 Zu den fuhrenden Compilern von JVM Sprachen zu JavaScript gehoren der Java zu JavaScript Compiler in Google Web Toolkit Clojurescript Clojure GrooScript Apache Groovy Scala js Scala und andere 9 Siehe auch BearbeitenDalvik eine von Google fur die Android Plattform entwickelte JVM HotSpot die am weitesten verbreitete JVM von Oracle IBM J9 JRockit BEA Systems jetzt Oracle Kaffe eine freie GPL JVM Implementierung Persistent Reusable Java Virtual Machine PRJVM eine von IBM modifizierte Form der JVM PreonVM 10 virtuelle Maschine fur ressourcenbeschrankte eingebettete Systeme SableVM freie LGPL JVM ImplementierungWeblinks Bearbeiten nbsp Commons Java Virtual Machine Sammlung von Bildern Videos und Audiodateien Download Seite der JRE inklusive der Java Virtual Machine bei Oracle JVM Dokumentation bei Oracle Spezifikation der Java VM englisch SPECjvm De facto Standard zur Messung der Leistung einer JVMEinzelnachweise Bearbeiten Concurnas the New Language on the JVM for Concurrent and GPU Computing In InfoQ com C4Media Inc abgerufen am 25 Juni 2020 englisch The Concurnas Programming Language Concurnas Ltd abgerufen am 25 Juni 2020 englisch The Nice programming language Abgerufen am 15 August 2019 englisch Kotlin Erster Web Auftritt fur JetBrains JVM Sprache it republik de abgerufen 22 Juli 2012 TeaVM Build Fast Modern Web Apps in Java Abgerufen am 23 Oktober 2019 englisch Dragome Web SDK Abgerufen am 23 Oktober 2019 englisch Bck2Brwsr APIDesign Abgerufen am 23 Oktober 2019 englisch GitHub decatur j2js compiler A Java Bytecode to JavaScript Cross Compiler In GitHub Abgerufen am 23 Oktober 2019 englisch List of languages that compile to JS jashkenas coffeescript Wiki GitHub Github com abgerufen am 26 Juni 2015 englisch PreonVM Virtuelle Maschine fur die Preon32 Serie Abgerufen am 10 November 2017 Abgerufen von https de wikipedia org w index php title Java Virtual Machine amp oldid 238228933