diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100313.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100313.html | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100313.html b/Master/Reference Architectures and Patterns/hjp5/html/k100313.html new file mode 100644 index 0000000..733a4a3 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100313.html @@ -0,0 +1,172 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100312.html;106,k100312.html;107,k100314.html;108,k100317.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100314.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 50 - Performance-Tuning
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id050001"></a>
+<h2>50.1 Einleitung </h2>
+<hr>
+<ul>
+<li><a href="k100313.html#sectlevel2id050001">50.1 Einleitung</a>
+</ul>
+<hr>
+
+<p>
+Java gilt gemeinhin als Sprache, die mit Performance-Problemen zu
+kämpfen hat. Nicht nur die Ablaufgeschwindigkeit des Compilers
+und anderer Entwicklungswerkzeuge, sondern vor allem die der eigenen
+Programme läßt oft zu wünschen übrig. Aufgrund
+der Plattformunabhängigkeit des vom Compiler generierten Bytecodes
+kann dieser normalerweise nicht direkt auf dem jeweiligen Betriebssystem
+ausgeführt werden. Er verwendet statt dessen einen eigenen Interpreter,
+die <a name="ixa103638"><i>Virtuelle Maschine</i></a> (kurz: VM),
+zur Ausführung der erstellten Programme.
+
+<p>
+Interpretierter Code wird naturgemäß langsamer ausgeführt
+als kompilierter, selbst wenn er in Form von Bytecodes vorliegt. Zwar
+ist es prinzipiell möglich, auch Java-Programme in Native-Code
+zu übersetzen (es gibt sogar einige kommerzielle Tools, die das
+tun), aber dann ist es mit der Plattformunabhängigkeit aus, und
+das fertige Programm läuft nur noch auf einem Betriebssystem.
+Während das für <i>Applikationen</i> in bestimmten Fällen
+akzeptabel sein mag, verbietet sich diese Vorgehensweise für
+<i>Applets</i>, die im Internet auf vielen verschiedenen Browsern
+und Betriebssystemen laufen müssen, von selbst. Zudem konterkarieren
+native-kompilierte Programme die Grundidee der plattformübergreifenden
+Binärkompatibilität, die eine der herausragenden Eigenschaften
+von Java ist.
+
+<p>
+Eine Alternativlösung bieten <a name="ixa103639"><i>Just-In-Time-Compiler</i></a>
+(kurz: <a name="ixa103640"><i>JIT</i></a>), deren Entwicklung in großen
+Schritten voranschreitet. Ein JIT ist ein Programm, das den Bytecode
+von Methoden während der Ausführung des Programms in Maschinencode
+der aktuellen Plattform übersetzt und so beim nächsten Aufruf
+wesentlich schneller ausführen kann. Vorteilhaft ist dabei, dass
+die Klassendateien mit dem Bytecode unverändert ausgeliefert
+werden können und das Programm seinen plattformübergreifenden
+Charakter erhält. Nur der Just-In-Time-Compiler ist plattformspezifisch
+und an ein bestimmtes Betriebssystem gebunden. Nahezu alle Hersteller
+kommerzieller Java-Produkte haben mittlerweile einen JIT als festen
+Bestandteil ihres Java-Entwicklungssystems eingebunden. Auch SUN liefert
+seit dem JDK 1.1.6 den Just-In-Time-Compiler von Symantec als festen
+Bestandteil des JDK aus.
+
+<p>
+Leider ist auch ein Just-In-Time-Compiler kein Allheilmittel gegen
+Performanceprobleme. Zwar ist er in der Lage, bestimmte Codeteile
+so stark zu beschleunigen, dass ihre Ablaufgeschwindigkeit der von
+kompiliertem C-Code nahekommt. Andererseits gibt es nach wie vor genügend
+Möglichkeiten, Programme zu schreiben, die <i>inhärent langsamen</i>
+Code enthalten, der auch von einem Just-In-Time-Compiler nicht entscheidend
+verbessert werden kann. Zudem ensteht durch den Einsatz des JIT ein
+gewisser Overhead, der möglicherweise einen Netto-Performancegewinn
+verhindert, denn das Kompilieren des Bytecodes kostet Zeit und zusätzlichen
+Speicher.
+
+<p>
+Des weiteren ist zu bedenken, dass zur Laufzeit eine Vielzahl von
+Checks durchgeführt werden müssen, die die Ablaufgeschwindigkeit
+von Java-Programmen vermindert:
+<ul>
+<li>Array- und String-Zugriffe werden auf Bereichsüberschreitungen
+geprüft.
+<li>Zeiger werden vor der Dereferenzierung gegen <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>
+gecheckt.
+<li>Zuweisungen von Objektinstanzen werden auf korrekte Typisierung
+geprüft.
+<li>Es gibt Checks zu vielen arithmetischen Operationen (Überläufe,
+Teilen durch Null usw.).
+</ul>
+
+<p>
+Am besten ist es daher, bereits während der Entwicklung der Programme
+auf die Ablaufgeschwindigkeit des erzeugten Codes zu achten. Wir wollen
+uns in diesem Kapitel einige typische Java-Konstrukte ansehen, die
+bei unachtsamer Verwendung zu Performance-Problemen führen können.
+Gleichzeitig wollen wir Möglichkeiten aufzeigen, wie man mit
+alternativem Code den Engpaß umgehen und die Ablaufgeschwindigkeit
+des Programms verbessern kann. Wenn man diese Regeln beachtet, ist
+es durchaus möglich, in Java größere Programme zu
+schreiben, deren Laufzeitverhalten auf aktuellen Rechnern absolut
+akzeptabel ist.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Wir wollen uns in diesem Kapitel nicht mit grundlegenden Techniken
+der Codeoptimierung beschäftigen. Auch wenn sie zeitweilig kurz
+angedeutet werden, können diese Themen besser in Büchern
+über Programmiersprachen, Algorithmen oder Optimierungstechniken
+für Compiler nachgelesen werden. Auch Tipps & Tricks, die
+in aller Regel nur marginale Verbesserungen bringen, oder langsamer
+Code, für den keine einfach anzuwendenden Alternativen bekannt
+sind, sollen hier nicht behandelt werden. Statt dessen wollen wir
+uns auf einige große Themenkomplexe konzentrieren, die leicht
+umzusetzen sind und in der Praxis schnell zu Verbesserungen führen.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100314.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
