Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (3. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel
gp Kapitel 8 Die Funktionsbibliothek
  gp 8.1 Die Java-Klassenphilosophie
    gp 8.1.1 Übersicht über die Pakete der Standardbibliothek
  gp 8.2 Wrapper-Klassen
    gp 8.2.1 Die Character-Klasse
    gp 8.2.2 Die Boolean-Klasse
    gp 8.2.3 Die Basisklasse Number für numerische Wrapper-Objekte
    gp 8.2.4 Die Klasse Integer
    gp 8.2.5 Behandlung von Überlauf
    gp 8.2.6 Unterschiedliche Ausgabeformate
    gp 8.2.7 Boxing und Unboxing
  gp 8.3 Ausführung von externen Programmen
    gp 8.3.1 DOS-Programme aufrufen
    gp 8.3.2 Die Windows-Registry verwenden
    gp 8.3.3 Einen HTML-Browser unter Windows aufrufen
  gp 8.4 Klassenlader (Class Loader)
    gp 8.4.1 Wie heißt die Klasse mit der Methode main()?
    gp 8.4.2 Zeitmessung und Profiling
  gp 8.5 Compilieren von Klassen
    gp 8.5.1 Der Sun-Compiler


Galileo Computing

8.5 Compilieren von Klassen downtop

Die Klassenbibliothek von Java bietet zwei unterschiedliche Techniken zum Übersetzen von Klassendateien. Die eine Methode steuert die Übersetzung einer geladenen Klasse von der Repräsentation in der JVM in eine die Geschwindigkeit steigernde Darstellung mit Hilfe eines Just-In-Time-(JIT) Compilers. Die andere Technik basiert auf der Idee, den Original-Compiler von Sun zu nutzen, dessen Schnittstelle ebenfalls in Java programmiert ist und als Klasse dem Java2 SDK (nicht der JRE) beiliegt. Auf diese Weise kann ein laufendes Programm einen (selbst erzeugten) Java-Quelltext übersetzen und die darin definierten Klassen anschließend sofort benutzen.


Galileo Computing

8.5.1 Der Sun-Compilertoptop

Besteht der Wunsch, aus einem Java-Programm heraus den Java-Compiler aufzurufen, so ist die eine Möglichkeit der Einsatz der Methode System.exec(). Doch es gibt auch einen anderen Weg. Er nutzt aus, dass auch der Sun-Compiler in Java programmiert ist. Er nutzt jedoch nicht die compileClasses()-Methoden der Klasse Compiler, da er direkt aus dem Quelltext des Programms Bytecode erstellt. Der Compiler liegt dem JDK nicht als Quellcode bei, jedoch ist die Klasse com.sun.tools.javac.Main in der Jar-Datei lib/tools.jar zu finden - und gegebenenfalls durch einen Disassembler oder Decompiler zu entschlüsseln. Das Binärprogramm javac fügt nichts Großartiges hinzu, abgesehen davon vielleicht, dass es noch die Heap-Größe setzt. Ein Aufruf des javac-Kommandos in exec() muss prinzipbedingt länger dauern als ein direkter Aufruf der main()-Methode des Compilers. Beim javac-Kommando muss das Betriebssystem einen neuen Prozess erzeugen. Eine zweite JVM wird geladen, die wieder alle dreihundert benötigten Standardklassen lädt und vom JIT-Compiler übersetzen lässt.

Den Sun-Compiler im eigenen Programm benutzen

Nicht nur die main()-Methode ist öffentlich, auch innerhalb eines eigenen Java-Programms können wir den Compiler gezielt benutzen. Dies geschieht mit dem Aufruf der Funktion compiler() aus der Klasse Main:

public static int compileJava( String javaFile )
{
  String[] args = {
    "-d",
    "c:/",
    "-classpath",
    System.getProperty("java.class.path"),
    javaFile };
   return Main.compile( args );
}

Die API ist nicht öffentlich, und bei dem Einsatz der Methode ist Vorsicht geboten, denn sie braucht in zukünftigen Versionen des JDK nicht mehr zu existieren. Da das Paket com.sun.tools.javac nicht dem JRE (Java Runtime Environment) beiliegt - nur zum Ausführen, aber nicht zum Entwickeln von Java-Programmen gedacht -, laufen keine Programme, die den Java-Compiler aufrufen.





Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing] [Buchkatalog] [Neue Bücher] [Vorschau]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de