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

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

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

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

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

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

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt Inhaltsverzeichnis Aufgabe... 1 Allgemein... 1 Active Directory... 1 Konfiguration... 2 Benutzer erstellen... 3 Eigenes Verzeichnis erstellen... 3 Benutzerkonto erstellen... 3 Profil einrichten... 5 Berechtigungen

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert Beamen in EEP Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert Zuerst musst du dir 2 Programme besorgen und zwar: Albert, das

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

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender 2010. FHNW, Services, ICT

Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender 2010. FHNW, Services, ICT Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender 2010 FHNW, Services, ICT Windisch, März 2013 Berechtigungen im Kalender 1 1 Gruppen 3 1.1 Die Gruppe/der Benutzer Standard

Mehr

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software Artologik EZ-Equip Plug-in für EZbooking version 3.2 Artologik EZbooking und EZ-Equip EZbooking, Ihre webbasierte Software zum Reservieren von Räumen und Objekten, kann nun durch die Ergänzung um ein oder

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

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me Bevor Sie die Platte zum ersten Mal benutzen können, muss sie noch partitioniert und formatiert werden! Vorher zeigt sich die Festplatte

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

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

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote Zweck dieser Anleitung ist es einen kleinen Überblick über die Funktion Last Minute auf Swisshotelportal zu erhalten. Für das erstellen

Mehr

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

Anmeldung bei einem registrierten Konto (Account)

Anmeldung bei einem registrierten Konto (Account) Anmeldung bei einem registrierten Konto (Account) Aufrufen des Anmeldefensters Geben sie in die Adresszeile ihres Internet-Browsers die Adresse (http://www.quid4bid.com) ein. Sie können entweder auf die

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista Allgemeines: Bitte lesen Sie sich diese Anleitung zuerst einmal komplett durch. Am Besten, Sie drucken sich diese Anleitung

Mehr

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen Um die maximale Sicherheit für das Betriebssystem und Ihre persönlichen Daten zu gewährleisten, können Sie Programme von Drittherstellern

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Step by Step Webserver unter Windows Server 2003. von Christian Bartl

Step by Step Webserver unter Windows Server 2003. von Christian Bartl Step by Step Webserver unter Windows Server 2003 von Webserver unter Windows Server 2003 Um den WWW-Server-Dienst IIS (Internet Information Service) zu nutzen muss dieser zunächst installiert werden (wird

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Partitionieren in Vista und Windows 7/8

Partitionieren in Vista und Windows 7/8 Partitionieren in Vista und Windows 7/8 Windows Vista und Windows 7 können von Haus aus Festplatten partitionieren. Doch die Funktion ist etwas schwer zu entdecken, denn sie heißt "Volume verkleinern".

Mehr

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003 Nicht kopieren Der neue Report von: Stefan Ploberger 1. Ausgabe 2003 Herausgeber: Verlag Ploberger & Partner 2003 by: Stefan Ploberger Verlag Ploberger & Partner, Postfach 11 46, D-82065 Baierbrunn Tel.

Mehr

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen. Millennium SMS Service Schnellübersicht Seite 1 von 6 1. Tägliche Arbeiten mit der SMS Bestätigung Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

Mehr

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE 2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE 2.1 Die Einrichtung der Benutzeroberfläche Das Einrichten einer Android-Eclipse-Entwicklungsumgebung zur Android-Entwicklung ist grundsätzlich nicht

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

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

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

iphone-kontakte zu Exchange übertragen

iphone-kontakte zu Exchange übertragen iphone-kontakte zu Exchange übertragen Übertragen von iphone-kontakten in ein Exchange Postfach Zunächst muss das iphone an den Rechner, an dem es üblicherweise synchronisiert wird, angeschlossen werden.

Mehr

Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen.

Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen. HACK #39 Hack Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen.»verschlüsseln Sie Ihren Temp-Ordner«[Hack #33] hat Ihnen gezeigt, wie Sie Ihre Dateien mithilfe

Mehr

25 Import der Beispiele

25 Import der Beispiele 25 Import der Beispiele Versuch es nicht mit Gewalt. Nimm einfach einen größeren Hammer (Murphy s Law) 25.1 Einleitung Alle Beispielprogramme dieses Buchs funktionieren mit jeder Java-konformen Entwicklungsumgebung.

Mehr

Handbuch B4000+ Preset Manager

Handbuch B4000+ Preset Manager Handbuch B4000+ Preset Manager B4000+ authentic organ modeller Version 0.6 FERROFISH advanced audio applications Einleitung Mit der Software B4000+ Preset Manager können Sie Ihre in der B4000+ erstellten

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Internet Explorer Version 6

Internet Explorer Version 6 Internet Explorer Version 6 Java Runtime Ist Java Runtime nicht installiert, öffnet sich ein PopUp-Fenster, welches auf das benötigte Plugin aufmerksam macht. Nach Klicken auf die OK-Taste im PopUp-Fenster

Mehr

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Howto Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Peter Bitterlich Markus Langer 12. Oktober 2012 Zusammenfassung Dieses Dokument erklärt Schritt für Schritt die Installation

Mehr

Windows 7 Winbuilder USB Stick

Windows 7 Winbuilder USB Stick Windows 7 Winbuilder USB Stick Benötigt wird das Programm: Winbuilder: http://www.mediafire.com/?qqch6hrqpbem8ha Windows 7 DVD Der Download wird in Form einer gepackten Datei (7z) angeboten. Extrahieren

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI TTS - TinyTimeSystem Unterrichtsprojekt BIBI Mathias Metzler, Philipp Winder, Viktor Sohm 28.01.2008 TinyTimeSystem Inhaltsverzeichnis Problemstellung... 2 Lösungsvorschlag... 2 Punkte die unser Tool erfüllen

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters Erste Schritte Wir heißen Sie herzlich willkommen im Newslettersystem der Euroweb Internet GmbH. Hier erfahren Sie die grundlegendsten Informationen, die Sie zur Erstellung und zum Versand eines Newsletters

Mehr

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de

Bedienungsanleitung. Stand: 26.05.2011. Copyright 2011 by GEVITAS GmbH www.gevitas.de GEVITAS-Sync Bedienungsanleitung Stand: 26.05.2011 Copyright 2011 by GEVITAS GmbH www.gevitas.de Inhalt 1. Einleitung... 3 1.1. Installation... 3 1.2. Zugriffsrechte... 3 1.3. Starten... 4 1.4. Die Menü-Leiste...

Mehr

Tutorial about how to use USBView.exe and Connection Optimization for VNWA.

Tutorial about how to use USBView.exe and Connection Optimization for VNWA. Tutorial about how to use USBView.exe and Connection Optimization for VNWA. Tutorial über den Gebrauch von USBView.exe und die Anschluss-Optimierung für den VNWA. Es wurde beobachtet, dass bestimmte VNWA

Mehr

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. www.blogger.com ist einer davon.

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. www.blogger.com ist einer davon. www.blogger.com Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. www.blogger.com ist einer davon. Sie müssen sich dort nur ein Konto anlegen. Dafür gehen Sie auf

Mehr

How to do? Projekte - Zeiterfassung

How to do? Projekte - Zeiterfassung How to do? Projekte - Zeiterfassung Stand: Version 4.0.1, 18.03.2009 1. EINLEITUNG...3 2. PROJEKTE UND STAMMDATEN...4 2.1 Projekte... 4 2.2 Projektmitarbeiter... 5 2.3 Tätigkeiten... 6 2.4 Unterprojekte...

Mehr

Was meinen die Leute eigentlich mit: Grexit?

Was meinen die Leute eigentlich mit: Grexit? Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine

Mehr

Aufklappelemente anlegen

Aufklappelemente anlegen Aufklappelemente anlegen Dieses Dokument beschreibt die grundsätzliche Erstellung der Aufklappelemente in der mittleren und rechten Spalte. Login Melden Sie sich an der jeweiligen Website an, in dem Sie

Mehr

5.2 Neue Projekte erstellen

5.2 Neue Projekte erstellen 5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort

Mehr

Qt-Projekte mit Visual Studio 2005

Qt-Projekte mit Visual Studio 2005 Qt-Projekte mit Visual Studio 2005 Benötigte Programme: Visual Studio 2005 Vollversion, Microsoft Qt 4 Open Source s. Qt 4-Installationsanleitung Tabelle 1: Benötigte Programme für die Qt-Programmierung

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

iloq Privus Bedienungsanleitung Schließanlagen Programmierung Version 1 - Copyright 2013

iloq Privus Bedienungsanleitung Schließanlagen Programmierung Version 1 - Copyright 2013 iloq Privus Schließanlagen Programmierung Version 1 - Copyright 2013 Kurth Electronic GmbH Kommunikations- & Sicherheitssysteme / Im Scherbental 5 / 72800 Eningen u. A. Tel: +49-7121-9755-0 / Fax: +49-7121-9755-56

Mehr

Programme im Griff Was bringt Ihnen dieses Kapitel?

Programme im Griff Was bringt Ihnen dieses Kapitel? 3-8272-5838-3 Windows Me 2 Programme im Griff Was bringt Ihnen dieses Kapitel? Wenn Sie unter Windows arbeiten (z.b. einen Brief schreiben, etwas ausdrucken oder ein Fenster öffnen), steckt letztendlich

Mehr

Computeria Solothurn

Computeria Solothurn Computeria Solothurn Seniorinnen und Senioren entdecken den Computer und das Internet Sich mit «TeamViewer» von einem Supporter helfen lassen Diese Anleitung und die Illustrationen wurden unter Mac OS

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man

Mehr

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt. Eine Weitergabe

Mehr

Wo möchten Sie die MIZ-Dokumente (aufbereitete Medikamentenlisten) einsehen?

Wo möchten Sie die MIZ-Dokumente (aufbereitete Medikamentenlisten) einsehen? Anleitung für Evident Seite 1 Anleitung für Evident-Anwender: Einbinden der MIZ-Dokumente in Evident. Wo möchten Sie die MIZ-Dokumente (aufbereitete Medikamentenlisten) einsehen? Zunächst müssen Sie entscheiden,

Mehr

Installation älterer Programmversionen unter Windows 7

Installation älterer Programmversionen unter Windows 7 Installation älterer Programmversionen unter Windows 7 Obwohl nicht explizit gekennzeichnet, sind alle MAGIX Produkte mit einer 15 im Namen, sowie MAGIX Video Pro X 1.5, Filme auf DVD 8 und Fotos auf CD

Mehr

Das Leitbild vom Verein WIR

Das Leitbild vom Verein WIR Das Leitbild vom Verein WIR Dieses Zeichen ist ein Gütesiegel. Texte mit diesem Gütesiegel sind leicht verständlich. Leicht Lesen gibt es in drei Stufen. B1: leicht verständlich A2: noch leichter verständlich

Mehr

Folgeanleitung für Klassenlehrer

Folgeanleitung für Klassenlehrer Folgeanleitung für Klassenlehrer 1. Das richtige Halbjahr einstellen Stellen sie bitte zunächst das richtige Schul- und Halbjahr ein. Ist das korrekte Schul- und Halbjahr eingestellt, leuchtet die Fläche

Mehr

Anzeige von eingescannten Rechnungen

Anzeige von eingescannten Rechnungen Anzeige von eingescannten Rechnungen Wenn Sie sich zu einer Eingangsrechnung die eingescannte Originalrechnung ansehen möchten, wählen Sie als ersten Schritt aus Ihrem Benutzermenü unter dem Kapitel Eingangsrechnung

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis www.wir-lieben-shops.de 1

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis www.wir-lieben-shops.de 1 Beispiel Shop-Eintrag Ladenlokal & Online-Shop. Als Händler haben Sie beim Shop-Verzeichnis wir-lieben-shops.de die Möglichkeit einen oder mehrere Shop- Einträge zu erstellen. Es gibt 3 verschiedene Typen

Mehr

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung Problem: Um AutoCAD abwechselnd auf mehreren Rechnern einsetzen zu können konnte man bis AutoCAD 2000 einfach den Dongle umstecken. Seit AutoCAD 2000i

Mehr

FTP-Server einrichten mit automatischem Datenupload für SolarView@Fritzbox

FTP-Server einrichten mit automatischem Datenupload für SolarView@Fritzbox FTP-Server einrichten mit automatischem Datenupload für SolarView@Fritzbox Bitte beachten: Der im folgenden beschriebene Provider "www.cwcity.de" dient lediglich als Beispiel. Cwcity.de blendet recht häufig

Mehr

icloud nicht neu, aber doch irgendwie anders

icloud nicht neu, aber doch irgendwie anders Kapitel 6 In diesem Kapitel zeigen wir Ihnen, welche Dienste die icloud beim Abgleich von Dateien und Informationen anbietet. Sie lernen icloud Drive kennen, den Fotostream, den icloud-schlüsselbund und

Mehr

WordPress. Dokumentation

WordPress. Dokumentation WordPress Dokumentation Backend-Login In das Backend gelangt man, indem man hinter seiner Website-URL einfach ein /wp-admin dranhängt www.domain.tld/wp-admin Dabei gelangt man auf die Administrationsoberfläche,

Mehr

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6) Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6) 1. Loggen Sie sich im Administratorbereich ein und gehen Sie auf Extension > Extension Manager 2. Wählen Sie Install languages 3. Klicken Sie

Mehr

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar 2015. ZID Dezentrale Systeme

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar 2015. ZID Dezentrale Systeme Novell Client Anleitung zur Verfügung gestellt durch: ZID Dezentrale Systeme Februar 2015 Seite 2 von 8 Mit der Einführung von Windows 7 hat sich die Novell-Anmeldung sehr stark verändert. Der Novell Client

Mehr

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

GSM Scanner Bedienungsanleitung

GSM Scanner Bedienungsanleitung GSM Scanner Bedienungsanleitung Inhaltsverzeichnis 1. Funktion der Tasten... 3 2. Erste Schritte... 4 2.1. Einschalten -----------------------------------------------------------------------------------

Mehr

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b AGROPLUS Buchhaltung Daten-Server und Sicherheitskopie Version vom 21.10.2013b 3a) Der Daten-Server Modus und der Tresor Der Daten-Server ist eine Betriebsart welche dem Nutzer eine grosse Flexibilität

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Erklärung zum Internet-Bestellschein

Erklärung zum Internet-Bestellschein Erklärung zum Internet-Bestellschein Herzlich Willkommen bei Modellbahnbau Reinhardt. Auf den nächsten Seiten wird Ihnen mit hilfreichen Bildern erklärt, wie Sie den Internet-Bestellschein ausfüllen und

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

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Um mit IOS2000/DIALOG arbeiten zu können, benötigen Sie einen Webbrowser. Zurzeit unterstützen wir ausschließlich

Mehr

Hex Datei mit Atmel Studio 6 erstellen

Hex Datei mit Atmel Studio 6 erstellen Hex Datei mit Atmel Studio 6 erstellen Es werden generell keine Atmel Studio Dateien ins Repository geladen, da jeder seine Dateien an anderen Orten liegen hat und weil nicht jeder das Atmel Studio 6 benutzt.

Mehr

Online Newsletter III

Online Newsletter III Online Newsletter III Hallo zusammen! Aus aktuellem Anlass wurde ein neuer Newsletter fällig. Die wichtigste Neuerung betrifft unseren Webshop mit dem Namen ehbshop! Am Montag 17.10.11 wurde die Testphase

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Peter Koos 03. Dezember 2015 0 Inhaltsverzeichnis 1 Voraussetzung... 3 2 Hintergrundinformationen... 3 2.1 Installationsarten...

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

Der Kalender im ipad

Der Kalender im ipad Der Kalender im ipad Wir haben im ipad, dem ipod Touch und dem iphone, sowie auf dem PC in der Cloud einen Kalender. Die App ist voreingestellt, man braucht sie nicht laden. So macht es das ipad leicht,

Mehr