e2:wiearbeitetjava

Funktionsweise von JAVA

Um die Funktionsweise von Java zu verstehen, blicken wir zunächst ein wenig zurück: Die 1. Generation von Programmen waren die Maschinenprogramme. Prozessoren in Computern verstehen nur Zahlen. Alle Befehle müssen als Binärzahlen eingegeben werden. Deshalb bestanden Maschinenprogramme nur aus Nullen und Einsen und waren aufwändig zu schreiben und sehr anfällig für Fehler.

Die 2. Generation stellten dann die Assemblerprogramme dar. Sie zeichneten sich durch etwas besser lesbare Quelltexte aus, weil die Symbolfolgen aus Nullen und Einsen durch bessere Bezeichner ersetzt wurden. Die Programmierung war weiterhin sehr maschinennah und deshalb kleinschrittig, denn Prozessoren konnten damals nur sehr einfache Operationen ausführen. Folgendes Beispiel verdeutlicht beide Generationen:

Mittlerweile wurden die Programmiersprachen weiter entwickelt, damit die Programme besser für Menschen lesbar sind und auch komplexere Befehle wie z.B. Schleifen enthalten können. Zudem wurde man damit von dem Befehlssatz des Prozessors unabhängig. Damit der Prozessor diese „Hochsprache“ verarbeiten kann, müssen die Quelltexte jedoch nach wie vor in Maschinenprogramme übersetzt werden.

Ein möglicher Ansatz ist der eines sog. Compilers, welcher die Programmbefehle Schritt für Schritt übersetzt, bevor das Programm gestartet werden kann. Die Programmiersprachen Delphi oder C++ sind bekannte Vertreter dieser Gattung. Das folgende Schaubild verdeutlicht die Arbeitsweise eines Compilers:

Einen anderen Ansatz verfolgen die Interpretersprachen, denn sie übersetzen nicht den gesamten Quellcode in Maschinensprache, sondern führen mit Hilfe einer Bibliothek von Maschinensprachenteilen jeden Befehl der Hochsprache sofort aus. Interpretersprachen sind z.B. viele Skriptsprachen wie VisualBasicScript oder JavaScript, aber auch oft Sprachen der künstlichen Intelligenz (KI) wie Lisp oder Prolog. Früher waren auch die meisten BASIC-Versionen Interpreter, z.B. das BASIC des Commodore 64.

Beide Ansätze haben Vor- und Nachteile:

  • Ein vom Compiler übersetztes Programm ist nachher auch ohne den Compiler ausführbar, während interpretierte Programme immer die Anwesenheit eines Interpreters voraussetzen.
  • Interpreter arbeiten i.A. wesentlich langsamer, da sie jeden Befehl neu „übersetzen“, auch wenn er wie in einer Schleife 100-mal vorkommt.
  • Compiler sind i.A. wesentlich komplexer aufgebaut als Interpreter und zwar umso mehr, je stärker sich die Struktur der Hochsprache von der Struktur der Maschinensprache unterscheidet.
  • Vom Compiler übersetzte Programme arbeiten immer nur auf demselben Prozessortyp.

  Java kombiniert beide Ansätze und erzeugt zunächst ein unabhängiges Zwischenformat:

Aus einem Programm in Hochsprache (z.B. HalloWelt.java) entsteht durch Compilieren (Übersetzen) das Zwischenformatprogramm HalloWelt.class. Dieses ist immer noch maschinen-un¬abhängig und kann übers Internet verschickt werden, ohne dass der Sender wissen muss, welchen Prozessor der Empfänger hat.

Beim Empfänger arbeitet ein Programm, das diesen Zwischenformatcode auf dem Rechner als Maschinenprogramm ausführbar macht, bei uns ist das die so genannte JAVA-VIRTUAL-MACHINE (JVM). Sie macht es auch (und vor allem) möglich, dass diese Programme im vorhandenen Browser ausgeführt werden können. Die JVM arbeitet dabei als Interpreter.

  • /var/www/infowiki/data/pages/e2/wiearbeitetjava.txt
  • Zuletzt geändert: 2017/09/22 13:42
  • von admin03