summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100313.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100313.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100313.html172
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">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100314.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</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&auml;mpfen hat. Nicht nur die Ablaufgeschwindigkeit des Compilers
+und anderer Entwicklungswerkzeuge, sondern vor allem die der eigenen
+Programme l&auml;&szlig;t oft zu w&uuml;nschen &uuml;brig. Aufgrund
+der Plattformunabh&auml;ngigkeit des vom Compiler generierten Bytecodes
+kann dieser normalerweise nicht direkt auf dem jeweiligen Betriebssystem
+ausgef&uuml;hrt werden. Er verwendet statt dessen einen eigenen Interpreter,
+die <a name="ixa103638"><i>Virtuelle Maschine</i></a> (kurz: VM),
+zur Ausf&uuml;hrung der erstellten Programme.
+
+<p>
+Interpretierter Code wird naturgem&auml;&szlig; langsamer ausgef&uuml;hrt
+als kompilierter, selbst wenn er in Form von Bytecodes vorliegt. Zwar
+ist es prinzipiell m&ouml;glich, auch Java-Programme in Native-Code
+zu &uuml;bersetzen (es gibt sogar einige kommerzielle Tools, die das
+tun), aber dann ist es mit der Plattformunabh&auml;ngigkeit aus, und
+das fertige Programm l&auml;uft nur noch auf einem Betriebssystem.
+W&auml;hrend das f&uuml;r <i>Applikationen</i> in bestimmten F&auml;llen
+akzeptabel sein mag, verbietet sich diese Vorgehensweise f&uuml;r
+<i>Applets</i>, die im Internet auf vielen verschiedenen Browsern
+und Betriebssystemen laufen m&uuml;ssen, von selbst. Zudem konterkarieren
+native-kompilierte Programme die Grundidee der plattform&uuml;bergreifenden
+Bin&auml;rkompatibilit&auml;t, die eine der herausragenden Eigenschaften
+von Java ist.
+
+<p>
+Eine Alternativl&ouml;sung bieten <a name="ixa103639"><i>Just-In-Time-Compiler</i></a>
+(kurz: <a name="ixa103640"><i>JIT</i></a>), deren Entwicklung in gro&szlig;en
+Schritten voranschreitet. Ein JIT ist ein Programm, das den Bytecode
+von Methoden w&auml;hrend der Ausf&uuml;hrung des Programms in Maschinencode
+der aktuellen Plattform &uuml;bersetzt und so beim n&auml;chsten Aufruf
+wesentlich schneller ausf&uuml;hren kann. Vorteilhaft ist dabei, dass
+die Klassendateien mit dem Bytecode unver&auml;ndert ausgeliefert
+werden k&ouml;nnen und das Programm seinen plattform&uuml;bergreifenden
+Charakter erh&auml;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&uuml;gend
+M&ouml;glichkeiten, Programme zu schreiben, die <i>inh&auml;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&ouml;glicherweise einen Netto-Performancegewinn
+verhindert, denn das Kompilieren des Bytecodes kostet Zeit und zus&auml;tzlichen
+Speicher.
+
+<p>
+Des weiteren ist zu bedenken, dass zur Laufzeit eine Vielzahl von
+Checks durchgef&uuml;hrt werden m&uuml;ssen, die die Ablaufgeschwindigkeit
+von Java-Programmen vermindert:
+<ul>
+<li>Array- und String-Zugriffe werden auf Bereichs&uuml;berschreitungen
+gepr&uuml;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&uuml;ft.
+<li>Es gibt Checks zu vielen arithmetischen Operationen (&Uuml;berl&auml;ufe,
+Teilen durch Null usw.).
+</ul>
+
+<p>
+Am besten ist es daher, bereits w&auml;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&uuml;hren k&ouml;nnen.
+Gleichzeitig wollen wir M&ouml;glichkeiten aufzeigen, wie man mit
+alternativem Code den Engpa&szlig; umgehen und die Ablaufgeschwindigkeit
+des Programms verbessern kann. Wenn man diese Regeln beachtet, ist
+es durchaus m&ouml;glich, in Java gr&ouml;&szlig;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&auml;ftigen. Auch wenn sie zeitweilig kurz
+angedeutet werden, k&ouml;nnen diese Themen besser in B&uuml;chern
+&uuml;ber Programmiersprachen, Algorithmen oder Optimierungstechniken
+f&uuml;r Compiler nachgelesen werden. Auch Tipps &amp; Tricks, die
+in aller Regel nur marginale Verbesserungen bringen, oder langsamer
+Code, f&uuml;r den keine einfach anzuwendenden Alternativen bekannt
+sind, sollen hier nicht behandelt werden. Statt dessen wollen wir
+uns auf einige gro&szlig;e Themenkomplexe konzentrieren, die leicht
+umzusetzen sind und in der Praxis schnell zu Verbesserungen f&uuml;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">&nbsp;Hinweis&nbsp;</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">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100312.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100314.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>