Inhaltsverzeichnis Inhaltsverzeichnis Einführung...2 Der Java Garbage Collector...2 Java Memory Leaks...4 Werkzeuge zur Speicheranalyse...

Größe: px
Ab Seite anzeigen:

Download "Inhaltsverzeichnis Inhaltsverzeichnis Einführung...2 Der Java Garbage Collector...2 Java Memory Leaks...4 Werkzeuge zur Speicheranalyse..."

Transkript

1 Java Memory Leaks Seminararbeit von Bosco Germano 6Ie Fachhochschule Aargau Departement Technik Studiengang I Betreuender Dozent: Prof. Dr. D. Gruntz Windisch, 6. Juli 2002

2 Abstract Many people think that Java is immune to memory leaks. In fact these people are wrong. Memory management is a consideration in Java programming as it is in C or C++. Even if Java s Garbage Collector solves the main cause of memory leaks, we can still have leaks in Java programs. Loiterers, as the Java memory leaks are called, are mainly due to unwanted object references. These references prevent the Garbage Collector from recycling the referenced objects. To clarify how these loiterers occur, a few different patterns of loitering objects have been identified.

3 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung Der Java Garbage Collector Wie funktioniert der Garbage Collector Gerüchte rund um den GC Java Memory Leaks...4 Loiterers Auswirkungen von Loiterers Lexikon der Loiterers Lapsed Listeners Lingerers Laggards Limbo Schwache Referenzen Werkzeuge zur Speicheranalyse Aufspüren von Memory Leaks mit Sitraka JProbe...10 Schluss...12 A. Anhang...13 A1. Listings...13 A2. Literaturverzeichnis

4 1 Einführung 1 Einführung Java löst das Problem der Memory Leaks. Diese Aussage kann man in ähnlicher Form in beinahe jedem Java-Buch nachlesen. Von Memory Leaks sprechen wir, wenn ein Programm Speicher alloziert, und diesen später nicht mehr dem Betriebssystem zurückgibt. Memory Leaks gelten in Sprachen wie C oder C++ zu den berüchtigtsten Programmierfehlern überhaupt. Java allerdings verspricht durch seinen eingebauten Garbage Collector dieses Problem zu lösen. Einige Java-Entwickler haben allerdings bei ihren Programmen klassisches Memory Leak - Verhalten bemerkt, das heisst die Programme brauchen mehr und mehr Speicher bis es schliesslich sogar zum Absturz kommt. Diese Arbeit beschäftigt sich mit der Frage, ob es in Java trotz Garbage Collector Memory Leaks gibt und wie man diese finden kann. 2 Der Java Garbage Collector 2.1 Wie funktioniert der Garbage Collector Um den Garbage Collector zu verstehen, müssen wir zuerst einen Blick auf Javas Memory Management werfen. Alle Objekte werden in Java mit dem new Operator alloziert und über Referenzen angesprochen. Wir können uns den Java-Heap als gerichteten Graph vorstellen. Objekte bilden dabei die Knoten des Graphen, während die Referenzen als Kanten zwischen den Knoten angesehen werden können. Dies ist auch die Art wie der Garbage Collector den Speicher sieht. Ziel des Garbage Collectors ist es, nicht mehr gebrauchte Objekte aus dem Speicher zu entfernen. Dies ist eine schwierige Aufgabe, da der Garbage Collector nicht wissen kann, ob ein bestimmtes Objekt noch gebraucht wird oder nicht. Der Garbage Collector arbeitet mit der Analogie des gerichteten Graphen; ausgehend von so genannten Wurzelknoten traversiert er den ganzen Graphen. Alle Objekte, welche beim Traversieren des Graphen nicht besucht wurden, werden als garbage behandelt und somit vom Garbage Collector abgeräumt. Dabei gibt es drei verschiedene Arten von Wurzelknoten: statische Felder in Klassen, gerade ausgeführte Java- Methode, globale Variablen in nativen Methoden oder eine Exception in einem Exception Handler. Wir veranschaulichen diesen Vorgang an einem kleinen Beispiel. Listing 1 zeigt ein einfaches Programm, welches ein Customer-Objekt instanziert, und darauf die Methode getbalance() aufruft. 2

5 2 Der Java Garbage Collector Listing 1. Das Customer-Objekt public static void main(string[] args) Customer fred = new Customer("Fred"); fred.getbalance(); System.out.println("Thank you" + fred); System.out.println("End of program"); // Within the Customer Class public double getbalance() BalanceUtility balanceutility = new BalanceUtility(); double balance = balanceutility.computebalance(this); return balance; public void finalize() System.out.println("A Customer is being garbage collected"); Sobald wir in diesem Beispiel nach dem Ausführen der getbalance() Methode zur main- Methode zurückkehren, gibt es keinerlei Referenzen mehr, die auf balanceutility zeigen. Dieses Objekt hat also keine Verbindung mehr zum Graphen, wird also vom Garbage Collector als potenzieller Abfall angeschaut. Was nicht heisst, dass dieses Objekt sofort vom Garbage Collector abgeräumt werden wird. In der Tat verwenden verschiedene Java VMs auch verschiedene Algorithmen für ihre Garbage Collectoren. Bild 1. Das balanceutility-objekt wird nicht mehr referenziert, also darf es vom GC abgeräumt werden. Eine Möglichkeit um das Abräumen eines Objektes einfach zu kontrollieren, ist die finalize() Methode. Diese Methode wird vom Garbage Collector aufgerufen kurz bevor das betreffende Objekt abgeräumt wird. Leider haben wir keine Garantie, dass diese Methode auch tatsächlich ausgeführt werden wird. In früheren Java VMs (1.1.x) gab es eine Methode runfinalizersonexit(true), welche uns diese Garantie zusicherte. Diese Methode existiert zwar noch in Java Version 2, ist allerdings deprecated, da sie bei Applikationen mit mehreren Threads zu Deadlocks führen kann. 3

6 2 Der Java Garbage Collector 2.2 Gerüchte rund um den GC Zum Thema GC gibt es einige Gerüchte, welche man immer wieder hört. Die zwei häufigsten seien hier kurz erwähnt und klargestellt. Das erste Gerücht besagt, dass der GC mit zyklischen Graphen nicht klarkommt. Wenn wir zum Beispiel drei Objekte A, B und C haben, mit Referenzen von A nach B, von B nach C und von C nach A, und auf diese drei Objekte keine weiteren Referenzen existieren, dann wird der Garbage Collector die drei Objekte abräumen. Bei anderen Systemen, die mit anderen Algorithmen arbeiten (z. B. Microsofts COM Technologie, welche mit Referenzzähler arbeitet), treten jedoch durchaus Probleme beim Behandeln von zyklischen Referenzgraphen auf. Das zweite Gerücht stammt von Entwicklern, die von C++ auf Java gewechselt haben. Die Behauptung ist, dass der finalizer in Java das gleiche sei wie die Destruktoren in C++. Das ist aber nicht richtig, da es einige Unterschiede zwischen den Finalizern und den Destruktoren gibt. Ein C++-Destruktor wird garantiert ausgeführt, und zwar unmittelbar beim delete Aufruf. Bei den Java-Finalizer garantiert uns niemand, dass diese auch wirklich ausgeführt werden. 3 Java Memory Leaks 3.1 Loiterers In Bild 2 sehen wir einen Java Heap als Graphen dargestellt. Jedes instanzierte Objekt befindet sich in einem von drei möglichen Zuständen: Reachable (Live) sind alle Objekte welche von einem Wurzelknoten aus erreichbar sind, und vom laufenden Programm noch benötigt werden. Reachable (Loitering) sind Objekte welche ebenfalls von einem Wurzelknoten erreichbar sind, die aber vom laufenden Programm nicht mehr benötigt werden. Not Reachable Objekte sind von den Wurzelknoten aus nicht mehr zu erreichen, sie können also beim nächsten Durchgang des GC abgeräumt werden. In Sprachen wie C++ würden die Objekte des Types not reachable die memory leaks bilden. Bei Java sieht es etwas anders aus, da sich ja der GC um die not reachable Objekte kümmert. Java Memory Leaks sind reachable Objekte, die noch referenziert sind, aber logisch nicht mehr gebraucht werden. Wie wir sehen unterscheiden sich Memory Leaks in C++ und Java ziemlich stark, oft ist es wichtig unterscheiden zu können ob wir von einem Java oder C++ Memory Leak sprechen, z. B. beim debuggen einer VM, welche teilweise aus C-Code besteht, aber auch aus Java-Code. Aus diesem Grund hat sich für Java Memory Leaks ein eigener Begriff durchgesetzt, nämlich loiterer. Das englische Wörterbuch liefert als Definition von Loiterer: an einem Ort sein, ohne offensichtlichen Grund. Auf deutsch etwa herumlungern. Dies trifft den Nagel auf dem Kopf Loiterer sind Objekte welche zwar im Heap sind aber eigentlich gar keinen Grund mehr haben, dort zu sein. 4

7 3 Java Memory Leaks Bild 2. Java Heap mit loitering - Objekten. 3.2 Auswirkungen von Loiterers Wenn sich ein Programm nach einer Weile mit der Meldung java.lang.outofmemoryerror verabschiedet, ist die Chance recht gross, dass wir es mit einem Memory Leak zu tun haben. Abgesehen von diesem ziemlich offensichtlichen Grund, wann müssen wir uns Sorgen machen um Memory Leaks? Ein Perfektionist würde wohl sagen, jedes Memory Leak muss gefunden und behoben werden. Bei Java haben allerdings nicht alle Memory Leaks gravierende Folgen. Die zwei wichtigsten Punkte, die wir berücksichtigen müssen, sind die Lebensdauer des Pogrammes und die Grösse des Leaks. Die Lebensdauer des Programms ist aus folgendem Grunde wichtig. Bei Java wird der Speicher von der VM verwaltet. Beim Beenden des Programms wird meist auch die VM beendet, und gibt auch den gesamten Speicher dem Betriebssystem zurück. Ein Memory Leak in einem Java- Programm, das nur ein sehr beschränkte Lebensdauer hat, wird also kaum Folgen haben. Ganz anders verhält es sich bei Programmen, die rund um die Uhr laufen müssen. Ein gutes Beispiel sind Server-Applikationen. Hier wird auch der kleinste Memory Leak früher oder später dazu führen, dass die VM all ihren Speicher aufbraucht und mit einer Exception abbricht. Die Grösse der Memory Leaks ist ebenfalls ein wichtiger Punkt. Memory Laeks in C sind normalerweise einzelne Objekte, in Java sind die Leaks selten einzelne Objekte, sondern meistens ganze Bäume von Objekte welche sich gegenseitig referenzieren. Ein Java Memory Leak kann also aus sehr vielen Objekten bestehen und sehr schnell ziemlich gross werden. 3.3 Lexikon der Loiterers Wir wissen jetzt, wie wir uns Memory Leaks in Java vorstellen können. Doch wann und wie treten sie auf? Ähnlich den Patterns bei der Programmierung, existieren auch bei den Loiterers verschiedene typische Fälle bei denen diese entstehen können. Die wichtigsten dieser Fälle werden im Folgenden behandelt. 5

8 3 Java Memory Leaks Lapsed Listeners Ein Lapsed Listener (zu deutsch etwa: verfallener Listener) ist ein Objekt, der einer Collection zugefügt wurde, nach Gebrauch aber nicht mehr aus der Collection entfernt wurde. Ein typisches Beispiel für diese Art von Loiterer sind Event-Listeners, die einer Listener-Liste zugefügt wurden, und die nicht mehr aus der Liste gelöscht wurden, obwohl sie gar nicht mehr gebraucht werden. Falls einer Listener-Liste immer wieder neue Listener zugefügt werden, die alten jedoch nie gelöscht, kann diese sehr gross werden. Es müssen also immer mehr Listener notifiziert werden. Entsprechend kann das Notifizieren aller Listener immer länger dauern und zu einem echten Performance-Problem werden. Diese Art von Loiterers ist vermutlich die häufigste, da Java- Swing und AWT ziemlich anfällig auf solche Probleme sind. Ein Beispiel für einen Lapsed Listener ist die Methode addpropertychangelistener() aus java.awt.toolkit(). Mit dieser Methode kann ein Listener registriert werden, der immer dann notifiziert wird, wenn eine Eigenschaft des Desktops ändert. Die Toolkit-Klasse ist als Singleton implementiert, sie wird also beim Start der Applikation erstellt und bleibt bis zum Schluss bestehen. Die meisten Listener, werden aber kaum so lange gebraucht werden. Da aber der Toolkit eine Referenz auf sie hat, können sie nicht von Garbage Collector aufgeräumt werden. Dieses Problem tritt dann auf, wenn ein Objekt mit sehr langer Lebensdauer eine Referenz auf Objekte mit kurzer Lebensdauer hat. Das kurzlebige Objekt wird dazu verdonnert im Speicher zu bleiben bis auch das langlebige nicht mehr gebraucht wird. Im Falle des Toolkit gibt es eine einfache Lösung um das Problem zu umgehen. Wir müssen die Methode removepropertychangelistener() aufrufen und zwar jedes Mal wenn wir einen Listener nicht mehr brauchen. Dies entspricht auch der allgemeinen Lösung für dieses Problem: Jedes Mal, wenn wir eine Methode im Stil addxxxlistener() implementieren, müssen wir auch eine Methode removexxxlistener() haben, und diese bei Bedarf auch aufrufen Lingerers Die zweite Art von Loiterer sind die so genannten Lingerers (zu deutsch: zögern, sich nicht halten können). Lingerers sind Objekte, die eine Weile rumzögern, obwohl sie nicht mehr gebraucht werden. Als Beispiel für Lingerer schauen wir Listing 2 an. Wir haben es nochmals mit einem Singleton zu tun, diesmal ein PrintService. In der PrintService-Klasse gibt es ein target-feld. Beim Aufruf der doprint()-methode wird das von target referenzierte Objekt ausgedruckt. Falls die doprint()-methode target nicht explizit auf null setzt, haben wir einen Lingerer. Das von target referenzierte Objekt wird nicht mehr gebraucht, bleibt aber trotzdem im Speicher bis der nächste Druckauftrag kommt. Der Memory Leak ist in diesem Falle zwar nur temporär, aber dafür umso grösser. Insbesondere beim PrintService Beispiel, da Druckaufträge unter Umständen sehr gross werden können. 6

9 3 Java Memory Leaks Listing 2. Ein typischer PrintService public class PrintService static PrintService singleton; Printable target; public PrintService getprintservice() return singleton; public void settarget(printable p) target = p; public void doprint() // set stuff up // print target Um diese Art von Leaks zu verhindern, gibt es eine einfache Lösung. Jede Methode muss nachdem ihre Eigentliche Aufgabe erfüllt ist, auch aufräumen. In diesem Falle müsste die doprint()-methode() das target-feld auf null setzten, damit der Garbage Collector in Aktion treten kann Laggards Die dritte Art von Loiterer ist der Laggard (zu deutsch: Bummler). Also jemand der stets etwas zurück bleibt. Laggards treten bei Objekten auf, die ihren Zustand ändern, aber weiterhin Referenzen zu Daten des alten Zustandes besitzen. Hinter Laggards stecken meistens funktionale Fehler, also echte Bugs. Diese sind aber ziemlich schwer zu lokalisieren und zeigen sich oft zuerst nur als Memory Leaks. Auch Laggards treten oft im Zusammenhang mit Singletons auf. Nehmen wir an, wir haben eine Klasse, die mehrere Instanzen haben darf. Nun müssen wir diese Klasse neu als Singleton schreiben, weil es z.b. zu aufwendig ist so viele Instanzen dieser Klasse zu erstellen. Da es jetzt nur eine Instanz der Klasse gibt, ist diese gezwungen, ihren Zustand oft zu ändern. Als Beispiel für einen Laggard können wir uns eine Klasse vorstellen, welche für ein bestimmtes Verzeichnis jeweils eine Referenz zur grössten, der kleinsten und der neusten Datei besitzt. Weisen wir nun der Klasse ein anderes Verzeichnis zu, müssten diese drei Referenzen angepasst werden. Falls stattdessen nur die Referenzen zur grössten und der kleinsten Datei angepasst werden, haben wir ein Laggard. Die Referenz zum neusten File, zeigt nämlich noch auf eine Datei im alten Verzeichnis. Wir haben es hier offensichtlich mit einem Programmierfehler zu tun, allerdings mit einem der recht schwer zu finden ist. 7

10 3 Java Memory Leaks Laggards können verhindert werden, indem wir bei Klassen, die ihren Zustand ändern müssen, möglichst alle Änderungen zentral in einer Methode durchführen. Auch kann man sich überlegen, welche Werte wir als Zustand einer Klasse speichern wollen und welche nicht. In gewissen Fällen ist es ratsam die Werte dynamisch bei Bedarf auszulesen. Bei unserem vorherigen Beispiel könnte man die neuste Datei z. B. dynamisch ermitteln anstatt sie als Referenz in der Klasse zu speichern. Dies natürlich nur, falls der Wert nicht allzu oft gebraucht würde Limbo Die vierte Art von Loiterer ist der Limbo. Sachen im Limbo sind zwischen zwei Welten gefangen. Objekte im Limbo sind nicht von langer Lebensdauer, brauchen dafür umso mehr Speicher. Limbos treten auf, wenn grosse nicht mehr gebrauchte Objekte vom Stack referenziert werden, und auf einer Methode/Thread warten müssen, die/der eine sehr lange Laufzeit hat, warten muss. Um das Ganze etwas zu veranschaulichen schauen wir ein kleines Beispiel an. Die method()- Methode in Listing 3 soll eine sehr grosse Datei einlesen, anschliessend sollen gewisse Elemente aus der grossen Datei von der parseit()-methode verarbeitet werden. Zuerst wird die readit()-methode aufgerufen, diese liest die gesamte Inputdatei ein, und belegt entsprechend viel Speicher. Daraufhin extrahiert findit() die relevanten Informationen aus dem big-objekt und speichert diese im viel kleineren item-objekt. Ab diesem Augenblick brauchen wir das big- Objekt nicht mehr und möchten am liebsten dessen Speicher für andere Zwecke nutzen. Sobald aber parseit() aufgerufen wird, hat der GC keine Chance mehr das big-objekt abzuräumen, da die method-methode im Stack noch eine Referenz darauf hat. Es bleibt uns nichts anderes übrig als abzuwarten bis die Methode zurückkehrt. Erst beim Beenden von method() wird das big- Objekt vom GC gelöscht. Listing 3. Methode um eine grosse Datei zu parsen void method() // this creates a large object Biggie big = readit(); // this condenses it Item item = findit(big); // we'd really like to reuse big's memory // big = null; // this method is going to run a long time parseit(item); 8

11 3 Java Memory Leaks Die einfachste Lösung für diese Art von Problemen ist das explizite null Setzen der big- Referenz. Wie auch in der auskommentierten Zeile im Listing sichtbar. Natürlich ist es in Java nicht notwendig alle Referenzen nach Gebrauch null zu setzten. Trotzdem ist es bei einigen Objekten wichtig, damit wir nicht grosse Objekte haben, die im Heap behalten werden, aufgrund einer Stackreferenz. 3.4 Schwache Referenzen Wie wir gesehen haben, entstehen die meisten Memory Leaks wegen ungewollten Referenzen. Alle bisherigen Lösungsvorschläge erfordern, dass diese Referenzen vom Programmierer explizit null gesetzt werden. Seit der JDK 1.2 bietet Java auch eine weitere Lösung gegen ungewollte Referenzen an, die so genannten Weak References. Eine Weak Reference ist eine Art Referenz, die den Garbage Collector nicht daran hindert das Objekt abzuräumen. Beim Traversieren des Heap-Baumes folgt der Garbage Collector nur den normalen Referenzen, ein Objekt, das nur noch durch Weak References erreichbar ist, wird also vom Garbage Collector nicht erreicht undwird somit als Garbage angeschaut. Die schwachen Referenzen sind in folgender Klasse implementiert: java.lang.ref.weakreference. Ein Beispiel für die Verwendung von Weak References ist Listing 5: LeakExampleFixed.java welches im Anhang gefunden werden kann. Dieses Beispiel wird im Zusammenhang mit den Speicheranalysetools im nächsten Kapitel genauer behandelt. Eine weitere nützliche Klasse, die mit JDK 1.2 eingeführt wurde, ist die WeakHashMap. Diese Klasse ist eine Kombination von HashMap und WeakReference. Die WeakHashMap besitzt nur WeakReferences zu ihren Elementen, d.h. falls ein Objekt nur von einer WeakHashMap referenziert wird, behandelt ihn der Garbage Collector als Garbage und wird es bei Bedarf abräumen. 4 Werkzeuge zur Speicheranalyse Es gibt verschiedene Werkzeuge, die verwendet werden können um den Javaspeicher zu analysieren und eventuelle Leaks aufzuspüren. Die wichtigsten dieser Möglichkeiten werden hier kurz beschrieben. Ein Tool zur Speicheranalyse besitzt jeder Java Programmierer, da es Teil der JDK ist. Die Java Virtual Maschine besitzt nämlich eine Option Xrunhprof, welche Informationen zur Speicherbelegung durch die VM in eine Log-Datei hineinschreiben kann. Weitere Informationen zur Benutzung dieser Option erhält man durch Eingabe von java Xrunhprof:help. Eine Spezifikation der erzeugten Daten ist unter Programming/JDCBook/perf3.html/ zu finden. Weiter könnte man das Java Virtual Machine Profiling Interface (dokumentiert unter direkt verwenden. Mit diesem Interface ist es möglich eine Vielzahl interner Vorgänge der VMs zu überwachen, unter anderem auch das Allozieren und Abräumen von Objekten. JVMPI ist aber ein natives Interface, um zu den Informationen zu kommen, müssten wir also eine eigene Library oder DLL in 9

12 4 Werkzeuge zur Speicheranalyse C programmieren. In den meisten Fällen wird sich der Aufwand ein eigenes Speicheranalysetool zu schreiben kaum lohnen. Die mächtigsten Werkzeuge sind die kommerziellen Memory Profiler/Debugger. Solche Profiler können sowohl die Speicherbelegung als auch referenzierte Objekte und Referenzen überwachen. Die gesammelten Daten werden anschliessend grafisch und tabellarisch dargestellt und können in Ruhe analysiert werden. Zu den kommerziellen Memory Profilern gehören unter anderem: Sitraka Software s JProbe Profiler with Memory Debugger Intuitive System s Optimizeit Java Performance Profiler IBM alphaworks JInsight 4.1 Aufspüren von Memory Leaks mit Sitraka JProbe Das Umgehen mit Speicheranalysetools wird hier an einem einfachen Beispiel gezeigt. Unser Beispielprogramm (Listing 4) ist im Wesentlichen ein GUI mit zwei Schaltflächen. Die Erste dient dazu weitere Schaltflächen hinzuzufügen. Mit der Zweiten können diese Schaltflächen wieder gelöscht werden. In diesem Programm hat sich ein Lapsed Listener eingeschlichen. Bei der Methode addbuttontopanel() werden die neu erzeugten Buttons einem Array buttons hinzugefügt. Die removebuttonfrompanel() Methode löscht die Buttons nur vom Panel, jedoch nicht aus dem buttons-array. Bild 3. Screenshot des Beispielprogramms leakexample.java Als Erstes starten wir JProbe, und wählen im Menu Run Profile and debug Java Code. Darauf erscheint das JProbe LaunchPad, hier müssen das Class-File angeben, welches die main- Methode beeinhaltet. Nach dem Betätigen der run-schaltfläche, sind zwei Fenster sichtbar. Das Programmfenster und auch das Runtime Heap Summary von JProbe. In diesem Fenster sehen wir zur Laufzeit, wieviel Speicher unser Java-Programm gerade braucht und auch welche und wie viele Klassen gerade instanziert sind. Dieses Fenster erlaubt es uns auch den GC explizit aufzurufen. Es können ebenfalls sogenannte Checkpoints gesetzt werden. Nach dem Setzen eines Checkpoints erscheint in der Instance Summary -Tabelle eine zusätzliche Spalte mit der Bezeichnung Count Change. In dieser Spalte kann abgelesen werden, ob die Anzahl Instanzen einer Klasse seit dem letzten Checkpoint zu oder abgenommen an. 10

13 4 Werkzeuge zur Speicheranalyse Bild 4. Runtime Heap Summary nach dem Setzten eines Checkpoints. Beim Betätigen des add-buttons in unserem Testprogramm, steigt der Count Change Wert der Klasse JButton, da wir neue Instanzen von JButton erzeugen. Beim anschliessenden Betätigen des remove-buttons verschwinden zwar die JButtons von unserer Programmoberfläche, der Wert für Count Change bleibt aber gleich, auch nachdem wir den Garbage Collector angeworfen haben. Offensichtlich werden die JButtons nicht mehr angezeigt bleiben aber alle im Speicher. Jprobe kann auch herausfinden an welcher Stelle in unserem Quellcode die Objekte instanziert werden, welche einen eventuellen Leak verursachen. Nach Beenden des Testprogramms, kann im JProbe Hauptfenster der Heap-Schnappschuss ausgewählt und angezeigt werden. Daraufhin erscheint der HeapBrowser. In diesem Fenster kann die Klasse, sowie eine bestimmte Instanz dieser Klasse ausgewählt werden. Nun stehen zu dieser Instanz verschiedene Informationen zur Verfügung, z. B. von wem die Klasse referenziert wurde, wen sie referenzierte, oder die genaue Stelle in unserem Quellcode, wo die Instanz erstellt wurde (siehe auch Bild 4). Sobald bekannt ist an welcher Stelle im Quellcode der Leak entsteht, ist es meist nicht allzu schwierig den Memory Leak zu beheben. Listing 5 im Anhang zeigt eine mögliche Lösung für das vorherige Beispiel mit den leakenden JButtons. Die ungewollten Referenzen sind in diesem Beispiel diejenigen im buttons-array. Nun wählen wir als Datentyp für dieses Array- WeakReferences und fügen die Buttons als ebensolche WeakReferences in das Array ein. Sobald die JButtons vom Panel gelöscht werden, sind sie nur noch durch schwache Referenzen zu erreichen und werden demzufolge als Garbage angeschaut. Analysieren wir LeakExampleFixed.java (Listing 5) mit Jprobe, werden wir sehen, dass beim Betätigen der remove-schaltfläche, die JButtons nicht nur vom Panel sondern auch aus dem Speicher gelöscht werden. Der Count Change -Wert für die JButtons wird also wieder auf 0 zurückfallen. 11

14 4 Werkzeuge zur Speicheranalyse Bild 4. HeapBrowser mit offenem Quellcode-Fenster In diesem Kapitel wurde ein kurzer Überblick über die Möglichkeiten eines professionellen Speicheranalysetools für Java gegeben. Solche Tools bieten eine Vielzahl weiterer Funktionen, z.b. Laufzeitanalyse der Applikation um herauszufinden welche Klassen oder Vorgänge dafür verantwortlich sind, dass ein Programm zu langsam läuft. Detaillierte Informationen zu allen Funktionen, sowie eine 15 Tage Testversion von JProbe kann unter gefunden werden. Schluss Memory Leaks sind nicht nur in C/C++ ein Problem, es gibt sie sehr wohl auch in Java. Viele Memory Leaks in Java sind nur temporär, spätestens nach dem Beenden der Java VM sind sie garantiert weg. Da aber Java Memory Leaks sehr viel Speicher belegen können, müssen vor allem bei langlebigen Applikationen Memory Leaks unbedingt verhindert werden. Java Memory Leaks entstehen in bei definierten Programmiermuster (Patterns), das Kennen dieser Muster, ist der erste Schritt um in Zukunft Memory Leaks zu vermeiden. Falls es doch zu Leaks kommt, gibt es immer noch Werkzeuge wie JProbe, die den Programmierer bei der Fehlersuche unterstützen können. 12

15 A. Anhang A. Anhang A1. Listings Listing 4. Beispiel für einen Lapsed Loiterer /***************************************************************************** * Copyright (c) 2001, SITRAKA INC. All Rights Reserved. * * * This file is provided for demonstration and educational uses only. * Permission to use, copy, modify and distribute this file for * any purpose and without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies, and that the name of Sitraka not be used in advertising * or publicity pertaining to this material without the specific, * prior written permission of an authorized representative of * Sitraka. * * SITRAKA MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, OR NON-INFRINGEMENT. SITRAKA SHALL NOT BE LIABLE FOR ANY * DAMAGES SUFFERED BY USERS AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. *****************************************************************************/ /* * $RCSfile: LeakExample.java,v $ * $Date: 2001/05/25 07:32:06 $ * $Revision: $ */ package examples.profiler.applications.leakexample; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LeakExample extends JFrame JPanel panel = new JPanel(); JButton buttons[] = new JButton[100]; int numbuttons = 0; public LeakExample() super("leak Example"); addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); panel.setlayout(new FlowLayout() ); getcontentpane().add("center", panel); JPanel addremovepanel = new JPanel(); JButton addbtn = new JButton("Add"); addbtn.addactionlistener(new ActionListener() public void actionperformed(actionevent e) addbuttontopanel(); 13

16 A. Anhang ); addremovepanel.add(addbtn); JButton removebtn = new JButton("Remove"); removebtn.addactionlistener(new ActionListener() public void actionperformed(actionevent e) removebuttonfrompanel(); ); addremovepanel.add(removebtn); getcontentpane().add("north", addremovepanel); public void addbuttontopanel() if ( numbuttons < buttons.length ) JButton btn = new JButton(String.valueOf( numbuttons ) ); buttons[numbuttons++] = btn; panel.add(btn); panel.validate(); panel.repaint(); public void removebuttonfrompanel() if ( numbuttons > 0 ) panel.remove(buttons[--numbuttons]); panel.validate(); panel.repaint(); System.gc(); static public void main(string args[]) JFrame frame = new LeakExample(); frame.setsize(300, 200); frame.setvisible(true); // End of class Listing 5. Das gleiche Beispiel nochmals, der Memory Leak wurde aber durch WeakReferences gelöst. package examples.profiler.applications.leakexample; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LeakExampleFixed extends JFrame JPanel panel = new JPanel(); java.lang.ref.weakreference buttons[] = new java.lang.ref.weakreference[100]; int numbuttons = 0; public LeakExampleFixed() super("leak Example"); addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); panel.setlayout(new FlowLayout() ); 14

17 A. Anhang getcontentpane().add("center", panel); JPanel addremovepanel = new JPanel(); JButton addbtn = new JButton("Add"); addbtn.addactionlistener(new ActionListener() public void actionperformed(actionevent e) addbuttontopanel(); ); addremovepanel.add(addbtn); JButton removebtn = new JButton("Remove"); removebtn.addactionlistener(new ActionListener() public void actionperformed(actionevent e) removebuttonfrompanel(); ); addremovepanel.add(removebtn); getcontentpane().add("north", addremovepanel); public void addbuttontopanel() if ( numbuttons < buttons.length ) JButton btn = new JButton(String.valueOf( numbuttons ) ); buttons[numbuttons++] = new java.lang.ref.weakreference(btn); panel.add(btn); panel.validate(); panel.repaint(); public void removebuttonfrompanel() if ( numbuttons > 0 ) panel.remove(((jbutton)(buttons[--numbuttons]).get())); panel.validate(); panel.repaint(); System.gc(); static public void main(string args[]) JFrame frame = new LeakExampleFixed(); frame.setsize(300, 200); frame.setvisible(true); // End of class 15

18 A. Anhang A2. Literaturverzeichnis Henry, E.; Lycklama, Ed (2000). How Do You Plug Java Memory Leaks, Dr. Dobb's- Journal. Stand: Patrick, Jim (2001). Handling Memory leaks in Java programs; IBM developer works. Stand: Nylund Joel (1999). Memory Leaks in Java Programs; Java Report. Stand: (2001) JProbe Profiler with Memory Debugger Manual, Sitraka Software 16

GUI Programmierung mit JAVA Swing

GUI Programmierung mit JAVA Swing GUI Programmierung mit JAVA Swing Komponenten Layout Event Handling Imaging 2001 Thomas Weiler 1 JAVA Swing Bibliothek zur Erstellung grafischer Benutzerschnittstellen in JAVA Bietet Klassen für grafische

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Programmentwicklung ohne BlueJ

Programmentwicklung ohne BlueJ Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie

Mehr

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Java I Vorlesung 11 Graphische Oberflächen mit Swing Java I Vorlesung 11 Graphische Oberflächen mit Swing 5.7.2004 Swing Komponenten Layout-Manager Events Swing und Threads Die Java-Plattform 2 Die Java-Plattform 3 "Hello World" in Swing HelloWorldS.java

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Ziele 2 (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen Benutzung von Vererbung zur Erstellung individueller GUI-Klassen durch Erweiterung

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik GUI-Programmierung mit Swing AWT und Swing Java enthält zwei Pakete zur Programmierung graphischer Oberflächen. java.awt: Das Abstract

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Objektorientierte Software-Entwicklung

Objektorientierte Software-Entwicklung Objektorientierte Software-Entwicklung Priv.-Doz. Dr. Rolf Hennicker 08.01.2003 AWT und Swing AWT (Abstract Window Toolkit) und Swing 2 AWT (Abstract Window Toolkit) und Swing AWT und Swing bieten eine

Mehr

Einführung in den NetBeans Profiler

Einführung in den NetBeans Profiler Let s talk about IT Wenn s mal wieder länger dauert Einführung in den NetBeans Profiler Dominik Hofmann 14.01.2010 Themenüberblick Themen Grundlagen und Features des NetBeans Profilers CPU Profiling Memory

Mehr

Password Management. Password Management Guide MF-POS 8

Password Management. Password Management Guide MF-POS 8 Password Management Password Management Guide MF-POS 8 MF-POS8 Einleitung Dieses Dokument beschreibt die Passwortverwaltung des Kassensystems MF-POS 8. Dabei wird zwischen einem Kellner und einem Verwaltungsbenutzer

Mehr

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr. Programmieren II Dr. Klaus Höppner Hochschule Darmstadt SS 2008 1 / 22 2 / 22 Einführung: GUI Fast alle Programme besitzen mittlerweile eine grafische Benutzeroberfläche (engl: Graphical User Interface,

Mehr

von Anja Austermann Drag and Drop

von Anja Austermann Drag and Drop von Anja Austermann Drag and Drop »Drag and Drop«ist die Bezeichnung für den Datentransfer zwischen unterschiedlichen Anwendungen mit grafischer Benutzeroberfläche. Zur Zeit arbeitet Drag and Drop in Java

Mehr

Up and Down - Projekt mit dem AT90USB162

Up and Down - Projekt mit dem AT90USB162 Up and Down - Projekt mit dem AT90USB162 Über diese Dokumentation: Projekt geplant, durchgeführt und ausgearbeitet von: Florian Patzer Erweiterte Projektangaben: Dieses Projekt wurde im Rahmen des Datenverarbeitungsunterrichts

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT?

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT? Java -The Standard Widget Toolkit- Inhaltsverzeichnis 1. Was ist? - Vorteile von - Nachteile von 2. Vorbereitungen für 3. Das erste Programm in 4. Widgets und Styleparameter 5. - Layouts Was ist ein Widget?

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Exkurs: Graphische Benutzeroberflächen FH Braunschweig/Wolfenbüttel Sommersemester 2009 1 / 22 Gliederung I Wiederholung Klassen, Objektorientierung (Kapitel 10,11) Exkurs:

Mehr

Session 1: Classes and Applets

Session 1: Classes and Applets Session 1: Classes and Applets Literature Sprechen Sie Java, ISBN 3-89864-117-1, dpunkt deutsch Java für Studenten, ISBN 3-8273-7045-0, PearsonStudium deutsch Java in a Nutshell, ISBN: 0-59600-283-1, O'Reilly

Mehr

Softwareschnittstellen

Softwareschnittstellen P4.1. Gliederung Rechnerpraktikum zu Kapitel 4 Softwareschnittstellen Einleitung, Component Object Model (COM) Zugriff auf Microsoft Excel Zugriff auf MATLAB Zugriff auf CATIA Folie 1 P4.2. Einleitung

Mehr

Grundlagen der Programmierung APPLETS

Grundlagen der Programmierung APPLETS Grundlagen der Programmierung APPLETS Inhalt dieser Einheit Java-Applets: Java-Applets Vor- und Nachteile Sicherheitskonzepte Methoden Einbetten in HTML Graphical User Interface 2 Java Applets Applets

Mehr

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de Stand FTE2 Anfang 4. Semester plus Projekt Multiuhren_Thread Ich gehe im Hinblick auf Klassenarbeiten und der Abschlussprüfung davon aus, dass Sie das Skript OOP JAVA2 durchgearbeitet haben. Wir haben

Mehr

Angewandte IT-Sicherheit

Angewandte IT-Sicherheit Angewandte IT-Sicherheit Johannes Stüttgen Lehrstuhl für praktische Informatik I 30.11.2010 Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 1 / 28 Aufgabe 1 Betrachten sie folgendes Programm:

Mehr

MediaBoxXT 4.0. Einfache Erstellung von Postscript-Dateien mit QuarkXPress. JoLauterbach Software GmbH Stolzingstraße 4a 95445 Bayreuth Germany

MediaBoxXT 4.0. Einfache Erstellung von Postscript-Dateien mit QuarkXPress. JoLauterbach Software GmbH Stolzingstraße 4a 95445 Bayreuth Germany MediaBoxXT 4.0 Einfache Erstellung von Postscript-Dateien mit QuarkXPress JoLauterbach Software GmbH Stolzingstraße 4a 95445 Bayreuth Germany Telefon: 0921-730 3363 Fax: 0921-730 3394 Internet: email:

Mehr

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren:

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren: Installationshinweise Z250I / Z270I Adapter IR USB Installation hints Z250I / Z270I Adapter IR USB 06/07 (Laden Sie den Treiber vom WEB, entpacken Sie ihn in ein leeres Verzeichnis und geben Sie dieses

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Ereignisbehandlung 21

Ereignisbehandlung 21 Ereignisbehandlung 21 3 Ereignisbehandlung Dieses Kapitel beschäftigt sich mit der Ereignisbehandlung, d.h. der Reaktion eines Programms auf Eingaben durch benutzende Personen. Nach einigen ersten Beispielen

Mehr

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung

Mehr

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2 Inhalt 1. Printing API 1. Übersicht 2. Vorgehen 3. Beispiel 2. Klasse PrintUtils 3. Mehrere Seiten drucken Folie 1 Lernziele Sie wissen, wie Sie Swing-Komponenten ausdrucken können Sie kennen den Aufbau

Mehr

BatchX 3.0. Stapelverarbeitung mit QuarkXPress. JoLauterbach Software GmbH Balthasar-Neumann-Str. 11 95444 Bayreuth

BatchX 3.0. Stapelverarbeitung mit QuarkXPress. JoLauterbach Software GmbH Balthasar-Neumann-Str. 11 95444 Bayreuth BatchX 3.0 Stapelverarbeitung mit QuarkXPress JoLauterbach Software GmbH Balthasar-Neumann-Str. 11 95444 Bayreuth Telefon: 0921-730 3363 Fax: 0921-730 3394 E-Mail : info@jolauterbach.de Internet: http://www.jolauterbach.de

Mehr

XML Template Transfer Transfer project templates easily between systems

XML Template Transfer Transfer project templates easily between systems Transfer project templates easily between systems A PLM Consulting Solution Public The consulting solution XML Template Transfer enables you to easily reuse existing project templates in different PPM

Mehr

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: graphical user interface, GUI) in Java GUI-Programmierung in Java GUI-Programmierung in Java 2002 Prof. Dr. Rainer Manthey Informatik II 1 AWT und Swing Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Inptools-Handbuch. Steffen Macke

Inptools-Handbuch. Steffen Macke Inptools-Handbuch Steffen Macke Inptools-Handbuch Steffen Macke Veröffentlicht $Date 2014-01-28$ Copyright 2008, 2009, 2011, 2012, 2014 Steffen Macke Dieses Dokument wurde unter der GNU-Lizenz für freie

Mehr

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0 Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Klausur vom 14. Juni 2004. Informatik 4

Klausur vom 14. Juni 2004. Informatik 4 Berner Fachhochschule Hochschule für Technik und Informatik, HTI Fachbereich Elektro- und Kommunikationstechnik Labor für Technische Informatik, Burgdorf Klasse: EV02-1 Name, Vorname: Klausur vom 14. Juni

Mehr

Benutzer- und Referenzhandbuch

Benutzer- und Referenzhandbuch Benutzer- und Referenzhandbuch MobileTogether Client User & Reference Manual All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or mechanical,

Mehr

Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster

Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster by Ali Bastan Gliederung Grundlagen von Swing 1. Kurze Einleitung 2. Warum Swing, wenn es das AWT gibt? 3. Was ist Swing? 4. Merkmale von Swing 5.

Mehr

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Graphische Benutzungsoberflächen

Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen

Mehr

Ein Manager mit CardLayout layout/cards.java

Ein Manager mit CardLayout layout/cards.java 201 Copyright 1996-1998 by Axel T. Schreiner. All Rights Reserved. Ein Manager mit CardLayout layout/cards.java CardLayout dient vor allem zum Aufbau von Inspektoren: In der gleichen Fläche soll je nach

Mehr

Java Performance Tuning

Java Performance Tuning Seminarunterlage Version: 5.04 Version 5.04 vom 16. Januar 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen

Mehr

7. Performance und Speicherauslastung

7. Performance und Speicherauslastung 7. Performance und Speicherauslastung Java-Parameter mit Performance-Einfluss Versteckte Speicherlecks Direkte Zeitmessung in Java Konzept von Performance-Messwerkzeugen Netbeans-Profiler Software-Qualität

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane Hochschule Harz Programmierung2 Tutorial 04: FB Automatisierung und Informatik Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm Programmierung 2 für MI / WI Thema: Swing, JSplitPane und I/O Versuchsziele Kenntnisse

Mehr

NTB Druckdatum: 01.04.13 -

NTB Druckdatum: 01.04.13 - AWT UND SWING AWT = abstract windowing toolkit Bausteine Eigenes Fenster Programmcode steht nicht im Main, sondern in einer separaten Klasse extends JFrame JWindow selbstständiges Fenster, ohne Rahmen

Mehr

Benutzeroberflächen. Java Teil 4

Benutzeroberflächen. Java Teil 4 Benutzeroberflächen Java Teil 4 Einleitung Eine grafische Benutzeroberfläche (Graphical User Interface) ermöglicht dem Benutzer die Interaktion mit dem Computer über grafische Symbole. Die GUI haben in

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Effiziente Java Programmierung

Effiziente Java Programmierung Effiziente Java Programmierung Seminar Implementierung moderner virtueller Maschinen am Beispiel von Java SS 2009 von Reinhard Klaus Losse 20. Mai 2009 Gliederung Definition Effizienz Werkzeuge zum Messen

Mehr

Software-Engineering Grundlagen des Software-Engineering

Software-Engineering Grundlagen des Software-Engineering Software-Engineering Grundlagen des Software-Engineering 7.2 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger SWE: 7.2 Programmentwicklung und Debuggen mit IDE

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Handbuch NOXON Favourites Commander

Handbuch NOXON Favourites Commander Handbuch NOXON Favourites Commander TerraTec Electronic GmbH Copyright (c) 2008 TerraTec Electronic GmbH. Permission is granted to copy, distribute and/or modify this document under

Mehr

Teil 1: Grundeigenschaften von Rechnern und Software

Teil 1: Grundeigenschaften von Rechnern und Software Blatt Nummer: 1 Teil 1: Grundeigenschaften von Rechnern und Software Aufgabe 1.1 [2P] Welcher fundamentale Unterschied besteht zwischen dem Zweck eines Computer von dem Zweck anderer Maschinen (etwa einer

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi 06.09.10 1

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi 06.09.10 1 Kapitel 1 Einstieg in Java Dr. Elham Firouzi 06.09.10 1 1 : Einstieg in Java Einleitung Ein erstes Beispiel Berner Fachhochschule Entwicklung von Java-Programmen Applikationen Applets Vor und Nachteile

Mehr

p^db=`oj===pìééçêíáåñçêã~íáçå=

p^db=`oj===pìééçêíáåñçêã~íáçå= p^db=`oj===pìééçêíáåñçêã~íáçå= Error: "Could not connect to the SQL Server Instance" or "Failed to open a connection to the database." When you attempt to launch ACT! by Sage or ACT by Sage Premium for

Mehr

Für AX 4.0, den letzten Hotfix rollup einspielen. Der Hotfix wurde das erste Mal im Hotfix rollup 975357 eingeschlossen:

Für AX 4.0, den letzten Hotfix rollup einspielen. Der Hotfix wurde das erste Mal im Hotfix rollup 975357 eingeschlossen: I. DOCTYPE-Deklaration Die INDEX.XML-Datei, die beim GDPdU-Export erstellt wird, beinhaltet eine DOCTYPE-Deklaration, die inkorrekterweise als Kommentar herausgegeben wird:

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI) 1 JAVA für Bauingenieure Alexander Karakas SS 2008 Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI) 21.05.2008 2 Was ist ein(e) GUI? GUI = Graphical User Interface = Graphische

Mehr

Clemens H. Cap http://wwwiuk.informatik.uni-rostock.de http://www.internet-prof.de. Bedarf an Zeit, Speicher, Netz und anderen Ressourcen

Clemens H. Cap http://wwwiuk.informatik.uni-rostock.de http://www.internet-prof.de. Bedarf an Zeit, Speicher, Netz und anderen Ressourcen Performance Bedarf an Zeit, Speicher, Netz und anderen Ressourcen Lernziel Warum ist Performance bei Ajax so wichtig? Was sind die Fallen bei Ajax Programmierung? Welche Werkzeuge gibt es? Ausgewählte

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich?

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich? KURZANLEITUNG Firmware-Upgrade: Wie geht das eigentlich? Die Firmware ist eine Software, die auf der IP-Kamera installiert ist und alle Funktionen des Gerätes steuert. Nach dem Firmware-Update stehen Ihnen

Mehr

Objekt-Orientierte Programmierung

Objekt-Orientierte Programmierung Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt

Mehr

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Projekte per DOM bearbeiten KAPITEL 5 5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Bisher haben wir uns angesehen, wie List & Label mit Ihren Daten bekannt gemacht werden kann und

Mehr

Cloud for Customer Learning Resources. Customer

Cloud for Customer Learning Resources. Customer Cloud for Customer Learning Resources Customer Business Center Logon to Business Center for Cloud Solutions from SAP & choose Cloud for Customer https://www.sme.sap.com/irj/sme/ 2013 SAP AG or an SAP affiliate

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2009 Praktikum: Grundlagen der Programmierung Aufgabenblatt 11 Prof. R. Westermann, R. Fraedrich,

Mehr

Swing Lernen am Code Teil 1

Swing Lernen am Code Teil 1 Swing Lernen am Code Teil 1 Swing Fenster erzeugen import java.awt.* import java.awt.event.* import javax.swing.* class SwingDemo{ static JFrame Fenster; public static void main(string[] args){ } } Fenster

Mehr

Applet Firewall und Freigabe der Objekte

Applet Firewall und Freigabe der Objekte Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

SAP Simple Finance Die Finanz- und Risikomanagementlösung für die Digital Economy

SAP Simple Finance Die Finanz- und Risikomanagementlösung für die Digital Economy SAP Simple Finance Die Finanz- und Risikomanagementlösung für die Digital Economy Elmar Hassler, Business Transformation Service, SAP Österreich GmbH Public SAP IT Summit 2015, 21. & 22. April, Salzburg

Mehr

tricerat Simplify Value Package

tricerat Simplify Value Package tricerat Simplify Value Package Das Simplify Value Package importiert mehr als 350 gebräuchliche Einstellungsobjekte in die Datenbank der Simplify Suite - so dass diese per Drag & Drop zugewiesen werden

Mehr

Typische Probleme. 7. Performance und Speicherauslastung. Parameter von java mit Performance-Einfluss. Parameter von javac mit Performance-Einfluss

Typische Probleme. 7. Performance und Speicherauslastung. Parameter von java mit Performance-Einfluss. Parameter von javac mit Performance-Einfluss 7. Performance und Speicherauslastung Java-Parameter mit Performance-Einfluss Versteckte Speicherlecks Direkte Zeitmessung in Java Konzept von Performance-Messwerkzeugen Netbeans-Profiler Software-Qualität

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Praktikum Informatik - 1

Praktikum Informatik - 1 Hochschule der Medien Stuttgart Studiengang Audiovisuelle Medien Praktikum Informatik - 1 Aufgabensammlung Prof. Uwe Schulz, Prof. Dr. Simon Wiest Organisation des Informatik Praktikums Sommersemester

Mehr

Java für C++ Programmierer

Java für C++ Programmierer Java für C++ Programmierer Alexander Bernauer bernauer@inf.ethz.ch Einführung in die Übungen zu Informatik II (D ITET) FS2010 ETH Zürich Ziel Allgemeiner Überblick Kennenlernen der Suchbegriffe Warum Java?

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Wörterbücher von MS nach Ooo konvertieren

Wörterbücher von MS nach Ooo konvertieren Wörterbücher von MS nach Ooo konvertieren Herausgegeben durch das deutschsprachige Projekt von OpenOffice.org Autoren Autoren vorhergehender Versionen RPK ggmbh Kempten Copyright und Lizenzhinweis Copyright

Mehr

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org)

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Dynamische Plug-ins mit Eclipse 3 Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Überblick Die Ausgangslage Dynamische Plug-ins Warum? Eclipse 3 Die OSGi-basierte

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung Aufgabe Editor package BA.GUI.Swing; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.logging.level; import java.util.logging.logger;

Mehr

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

Mehr

com.tom PORTAL Registrierung

com.tom PORTAL Registrierung com.tom PORTAL Registrierung Copyright 2000-2010 Beck IPC GmbH Page 1 of 6 TABLE OF CONTENTS 1 AUFGABE... 3 2 DEFINITIONEN... 3 3 PRODUKTE... 3 4 REGISTRIERUNG... 3 5 PROJEKT-REGISTRIERUNG... 4 5.1 PROJEKT...

Mehr

Einbindung der Tastatur

Einbindung der Tastatur Einbindung der Tastatur Auch die Tastatur kann man wie die Maus zur interaktiven Programmsteuerung verwenden. Bei der Maus ist stets klar, welche grafische Komponente bei einem Klick oder einer Bewegung

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

ReadMe zur Installation der BRICKware for Windows, Version 6.1.2. ReadMe on Installing BRICKware for Windows, Version 6.1.2

ReadMe zur Installation der BRICKware for Windows, Version 6.1.2. ReadMe on Installing BRICKware for Windows, Version 6.1.2 ReadMe zur Installation der BRICKware for Windows, Version 6.1.2 Seiten 2-4 ReadMe on Installing BRICKware for Windows, Version 6.1.2 Pages 5/6 BRICKware for Windows ReadMe 1 1 BRICKware for Windows, Version

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

LeJOS: Mindstorms in Java programmieren

LeJOS: Mindstorms in Java programmieren LeJOS: Mindstorms in Java programmieren Alexander Koller Softwareprojekt "Sprechende Roboter" 30. April 2004 Überblick Warum Java? Was ist LeJOS? Motoren steuern Auf Sensoreingaben reagieren Wie geht's

Mehr

Galileo Desktop Benutzerhandbuch Version 1.02

Galileo Desktop Benutzerhandbuch Version 1.02 Galileo Desktop Benutzerhandbuch Version 1.02 Galileo Deutschland GmbH. All rights reserved. Dieses Dokument enthält Informationen, an denen Galileo International Rechte besitzt. Dieses Dokument darf nur

Mehr

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

TCP/IP Programmierung. C# TimeServer Java6 TimeClient TCP/IP Programmierung C# TimeServer Java6 TimeClient Stand 19.10.11 21:24:32 Seite 1 von 16 Inhaltsverzeichnis Erläuterung...3 Software...3 C#TimeServer...4 Klasse ServerThread...6 Starten und Beenden...7

Mehr

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Softwareupdate-Anleitung // AC Porty L Netzteileinschub 1 Softwareupdate-Anleitung // AC Porty L Netzteileinschub Softwareupdate-Anleitung // AC Porty L Netzteileinschub HENSEL-VISIT GmbH & Co. KG Robert-Bunsen-Str. 3 D-97076 Würzburg-Lengfeld GERMANY Tel./Phone:

Mehr

SnagIt 9.0.2. Movable Type Output By TechSmith Corporation

SnagIt 9.0.2. Movable Type Output By TechSmith Corporation SnagIt 9.0.2 By TechSmith Corporation TechSmith License Agreement TechSmith Corporation provides this manual "as is", makes no representations or warranties with respect to its contents or use, and specifically

Mehr

Packages. Man kann mehrere Klassen in eine package zusammenfassen.

Packages. Man kann mehrere Klassen in eine package zusammenfassen. Packages Man kann mehrere Klassen in eine package zusammenfassen. Diese müssen dann in einem Unterverzeichnis liegen, dessen Name der Packagename ist. Jede Datei der Package muss mit package ; beginnen,

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Erste Schritte mit Eclipse

Erste Schritte mit Eclipse Erste Schritte mit Eclipse März 2008, KLK 1) Java Development Kit (JDK) und Eclipse installieren In den PC-Pools der HAW sind der JDK und Eclipse schon installiert und können mit dem Application Launcher

Mehr

Release Notes BRICKware 7.5.4. Copyright 23. March 2010 Funkwerk Enterprise Communications GmbH Version 1.0

Release Notes BRICKware 7.5.4. Copyright 23. March 2010 Funkwerk Enterprise Communications GmbH Version 1.0 Release Notes BRICKware 7.5.4 Copyright 23. March 2010 Funkwerk Enterprise Communications GmbH Version 1.0 Purpose This document describes new features, changes, and solved problems of BRICKware 7.5.4.

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 1 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2015 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello! 12.10.2015 Dr. Werner Struckmann / Stephan

Mehr

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform 0. Benötigt werden folgende Softwarepakete:.NET Framework Software Development Kit (http://www.microsoft.com/downloads/details.aspx?familyid=4fe5bdb5-c7a7-4505-9927-2213868a325b&displaylang=en)

Mehr