Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Exceptions
7 Generics<T>
8 Äußere.innere Klassen
9 Besondere Klassen der Java SE
10 Architektur, Design und angewandte Objektorientierung
11 Die Klassenbibliothek
12 Bits und Bytes und Mathematisches
13 Datenstrukturen und Algorithmen
14 Threads und nebenläufige Programmierung
15 Raum und Zeit
16 Dateien, Verzeichnisse und Dateizugriffe
17 Datenströme
18 Die eXtensible Markup Language (XML)
19 Grafische Oberflächen mit Swing
20 Grafikprogrammierung
21 Netzwerkprogrammierung
22 Verteilte Programmierung mit RMI
23 JavaServer Pages und Servlets
24 Datenbankmanagement mit JDBC
25 Reflection und Annotationen
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
geb., mit DVD
1482 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1506-0
Pfeil 26 Dienstprogramme für die Java-Umgebung
  Pfeil 26.1 Die Werkzeuge vom JDK
  Pfeil 26.2 Java-Compiler und Java-Laufzeitumgebung
    Pfeil 26.2.1 Bytecode-Compiler javac
    Pfeil 26.2.2 Native Compiler
    Pfeil 26.2.3 Java-Programme in ein natives ausführbares Programm einpacken
    Pfeil 26.2.4 Der Java-Interpreter java
  Pfeil 26.3 Das Archivformat Jar
    Pfeil 26.3.1 Das Dienstprogramm jar benutzen
    Pfeil 26.3.2 Das Manifest
    Pfeil 26.3.3 Applikationen in Jar-Archiven starten
    Pfeil 26.3.4 Applets in Jar-Archiven
  Pfeil 26.4 Monitoringprogramme
    Pfeil 26.4.1 jps
    Pfeil 26.4.2 jstat
    Pfeil 26.4.3 jmap
    Pfeil 26.4.4 jstack
    Pfeil 26.4.5 VisualVM
  Pfeil 26.5 Ant
    Pfeil 26.5.1 Bezug und Installation von Ant
    Pfeil 26.5.2 Das Build-Skript build.xml
    Pfeil 26.5.3 Build den Build
    Pfeil 26.5.4 Properties
    Pfeil 26.5.5 Externe und vordefinierte Properties
    Pfeil 26.5.6 Weitere Ant-Tasks
  Pfeil 26.6 Weitere Dienstprogramme
    Pfeil 26.6.1 Sourcecode Beautifier
    Pfeil 26.6.2 Java-Programme als Systemdienst ausführen
  Pfeil 26.7 Zum Weiterlesen


Rheinwerk Computing - Zum Seitenanfang

26.2 Java-Compiler und Java-Laufzeitumgebung  Zur nächsten ÜberschriftZur vorigen Überschrift


Rheinwerk Computing - Zum Seitenanfang

26.2.1 Bytecode-Compiler javac  Zur nächsten ÜberschriftZur vorigen Überschrift

Der Compiler javac übersetzt den Quellcode einer Datei in Java-Bytecode. Jede in einer Datei deklarierte Klasse übersetzt der Compiler in eine eigene Klassendatei. Wenn bei einer Klasse (nennen wir sie A) eine Abhängigkeit zu einer anderen Klasse (nennen wir sie B) besteht – wenn zum Beispiel A von B erbt – und B nicht als Bytecode-Datei vorliegt, dann verarbeitet der Compiler B automatisch mit. Der Compiler überwacht also automatisch die Abhängigkeiten der Quelldateien. Der allgemeine Aufruf des Compilers ist:

$ javac [ Optionen ] Dateiname(n).java

Tabelle 26.1  Optionen des Compilers javac

Option Bedeutung

-cp classpath

Eine Liste von Pfaden, auf denen der Compiler die Klassendateien finden kann. Diese Option überschreibt die unter Umständen gesetzte Umgebungsvariable CLASSPATH und ergänzt sie nicht. Ein Semikolon (Windows) beziehungsweise Doppelpunkt (Unix) trennt mehrere Verzeichnisse.

-d Verzeichnis

Gibt an, wo die übersetzten .class-Dateien gespeichert werden. Ohne Angabe legt der Compiler sie in das gleiche Verzeichnis wie das mit den Quelldateien.

-deprecation

Zeigt veraltete Methoden an.

-g

Erzeugt Debug-Informationen. Die Option muss gesetzt sein, damit der Debugger alle Informationen hat. –g:none erzeugt keine Debug-Informationen, was die Klassendatei etwas kleiner macht.

-nowarn

Deaktiviert die Ausgabe von Warnungen. Fehler (errors) werden noch angezeigt.

-source Version

Erzeugt Bytecode für eine bestimmte Java-Version.

-sourcepath Quellpfad

Ähnlich wie -classpath, nur sucht der Compiler im Quellpfad nach Quelldateien.

-verbose

Ausgabe von Meldungen über geladene Quell- und Klassendateien während der Übersetzung.



Rheinwerk Computing - Zum Seitenanfang

26.2.2 Native Compiler  Zur nächsten ÜberschriftZur vorigen Überschrift

Eine in Java geschriebene Applikation lässt sich erst einmal nur mit einer Java-Laufzeitumgebung ausführen. Einige Hersteller haben jedoch Compiler entwickelt, die direkt unter Windows oder einem anderen Betriebssystem ausführbare Programme erstellen. Die Compiler, die aus Java-Quelltext – oder Java-Bytecode – Maschinencode der jeweiligen Architektur erzeugen, nennen sich native oder Ahead-of-Time Compiler. Das Ergebnis ist eine direkt ausführbare Datei, die keine Java-Laufzeitumgebung nötig macht. Je nach Anwendungsfall kann das Programm performanter sein, eine Garantie dafür gibt es allerdings nicht. Die Startzeiten sind im Allgemeinen geringer, und das Programm ist viel schwieriger zu entschlüsseln, was das Reverse Engineering [Das Zurückverwandeln von unstrukturiertem Binärcode in Quellcode. ] angeht.

Ein freier Compiler unter der GNU-Lizenz ist gcj (http://gcc.gnu.org/java/). Für den gcj integriert das Open-Source-Projekt JavaCompiler (http://javacompiler.mtsystems.ch/) diverse Zusätze, um natives Übersetzen zu vereinfachen.

Ein kommerzieller Vertreter ist Excelsior JET (http://www.excelsior-usa.com/jet.html). Dass viele Hersteller ihre Produkte eingestellt haben, ist sicherlich ein Zeichen dafür, dass die existierenden Laufzeitumgebungen mittlerweile eine ausreichende Geschwindigkeit, einen vertretbaren Speicherverbrauch und annehmbare Startzeiten zeigen.


Rheinwerk Computing - Zum Seitenanfang

26.2.3 Java-Programme in ein natives ausführbares Programm einpacken  Zur nächsten ÜberschriftZur vorigen Überschrift

Wer Java-Programme vertreibt, weiß um das Problem der JVM-Versionen, Pfade, Start-Icons, Splash-Screens und so weiter Bescheid. Eine Lösung besteht darin, einen Wrapper zu bemühen, der sich als ausführbares Programm wie eine Schale um das Java-Programm legt. Der Wrapper ruft die virtuelle Maschine auf und übergibt ihr die Klassen. Es ist also immer noch eine Laufzeitumgebung nötig, doch lassen sich den Java-Programmen Icons mitgeben und Startparameter setzen.

Die Open-Source-Software launch4j (http://launch4j.sourceforge.net/) kapselt ein Java-Archiv mit Klassen und Ressource-Dateien in ein komprimiertes, ausführbares Programm für Windows, Linux, Mac OS X und Solaris. launch4j setzt Eigenschaften wie ein assoziiertes Icon oder Startvariablen mit einer angenehmen grafischen Oberfläche. Ein weiteres quelloffenes und freies Programm ist JSmooth (http://jsmooth.sourceforge.net/). Für beide gibt es Ant-Skripte.


Rheinwerk Computing - Zum Seitenanfang

26.2.4 Der Java-Interpreter java  topZur vorigen Überschrift

Der Java-Interpreter java führt den Java-Bytecode in der Laufzeitumgebung aus. Dazu sucht der Interpreter in der als Parameter übergebenen Klassendatei nach der speziellen statischen main()-Methode. Der allgemeine Aufruf ist:

$ java [ Optionen ] Klassenname [ Argumente ]

Ist die Klasse in einem Paket deklariert, muss der Name der Klasse voll qualifiziert sein. Liegt die Klasse Main etwa im Paket com.tutego, also im Unterverzeichnis com/tutego, muss der Klassenname com.tutego.Main lauten. Die benötigten Klassen muss die Laufzeitumgebung finden können. Die JVM wertet wie der Compiler die Umgebungsvariable CLASSPATH aus und erlaubt die Angabe des Klassenpfades durch die Option -classpath.


Tabelle 26.2  Optionen des Interpreters java

Option Bedeutung

-client

Wählt die Java HotSpot Client VM, Standard.

-server

Wählt die Java HotSpot Server VM.

-cp classpath

Eine Liste von Pfaden, innerhalb derer der Compiler die Klassendateien finden kann. Diese Option überschreibt die unter Umständen gesetzte Umgebungsvariable CLASSPATH und ergänzt sie nicht. Das Semikolon (Windows) beziehungsweise der Doppelpunkt (Unix) trennen mehrere Verzeichnisse.

-D Property= Wert

Setzt den Wert einer Property, etwa -Dversion=1.2, die später System.getProperty() erfragen kann.

-help oder -?

Listet alle vorhandenen Optionen auf.

-ea

Ermöglicht Assertions, die standardmäßig ausgeschaltet sind.

-jar

Startet eine Klasse aus dem Jar-Archiv, falls sie in der Manifest-Datei genannt ist. Die Hauptklasse lässt sich aber immer noch angeben.

-verbose

Informationen über die Laufzeitumgebung

-verbose:class gibt Informationen über geladene Klassen.

-verbose:gc informiert über GC-Aufrufe.

-verbose:jni informiert über native Aufrufe.

-version

Zeigt die aktuelle Version an.

-X

Zeigt nicht standardisierte Optionen an.

-Xdebug

Startet mit Debugger.

-Xincgc

Schaltet den inkrementellen GC ein.

-Xmsn

Anfangsgröße des Speicherbereichs für die Allokation von Objekten (n MiB), voreingestellt sind 2 MiB.

-Xmxn

Maximal verfügbarer Speicherbereich für die Allokation von Objekten. Voreingestellt sind 64 MiB. n beschreibt als einfache Zahl die Bytes oder Kilobytes mit einem angefügten k oder Megabytes (angefügtes m). Beispiel: -Xms128m.

-Xnoclassgc

Schaltet den GC für geladene, aber nicht mehr benötigte Klassen aus.

-Xprof

Der Interpreter schreibt Profiling-Informationen in der Datei java.prof.

-Xrs

Reduziert intern die Verwendung von Unix-Signalen durch die Laufzeitumgebung. Das ergibt gegebenenfalls eine schlechtere Performance, aber eine bessere Kompatibilität mit diversen Unix-/Solaris-Versionen.

-Xssn

Setzt die Größe des Stacks.


Class-Path-Wildcard

Die Option -cp erweitert den Klassenpfad durch Java-Archive (.jar-Dateien) und einzelne Klassen-Dateien (.class-Dateien). Seit Java 6 ermöglicht eine Class-Path-Wildcard über * eine noch einfachere Angabe von Java-Archiven. So fügt folgende Angabe alle Java-Archive im Verzeichnis lib dem Klassenpfad hinzu:

$ java -cp lib/* Main

Wichtig sind die einfachen Anführungszeichen: Sie verhindern, dass die Kommando-Shell Ersetzungen vornimmt. Das Java-Laufzeitsystem erweitert die Angabe vor dem Start des Programms und nicht erst während des Klassenladens.


Hinweis Je länger es die JVM von Oracle gibt, desto länger wurde die Liste der Optionen. http://blogs.sun.com/watt/resource/jvm-options-list.html listet diese je nach Version kurz auf.


Der Unterschied zwischen »java.exe« und »javaw.exe«

Unter einer Windows-Installation gibt es im Java-JDK für den Interpreter zwei ausführbare Dateien: java.exe und javaw.exejava.exe stellt die Regel dar. Der Unterschied besteht darin, dass eine über die grafische Oberfläche gestartete Applikation mit java.exe im Unterschied zu javaw.exe ein Konsolenfenster anzeigt. Ohne Konsolenfenster sind mit javaw dann auch Ausgaben über System.out/err nicht sichtbar.

In der Regel nutzt ein Programm mit grafischer Oberfläche während der Entwicklung java und im Produktivbetrieb dann javaw. Ein kleines (oder großes) Ärgernis bestand bei Systemaufrufen mit Runtime.exec(), weil sich plötzlich ein Konsolenfenster öffnete, das dann wieder verschwand. Der Fehler feierte regelmäßig Geburtstag (4244515), bis er in Version 1.4 behoben wurde. Bei java wurde kein zusätzliches Fenster erzeugt.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
 <<   zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Java SE Bibliotheken






 Java SE Bibliotheken


Zum Katalog: Professionell entwickeln mit Java EE 7






 Professionell
 entwickeln mit
 Java EE 7


Zum Katalog: Einstieg in Eclipse






 Einstieg in
 Eclipse


Zum Katalog: Einstieg in Java






 Einstieg in
 Java


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2011
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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern