Java Virtual Machine. Programmiermethodik. Eva Zangerle Universität Innsbruck

Größe: px
Ab Seite anzeigen:

Download "Java Virtual Machine. Programmiermethodik. Eva Zangerle Universität Innsbruck"

Transkript

1 Java Virtual Machine Programmiermethodik Eva Zangerle Universität Innsbruck

2 Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle Themen Generische Programmierung Java Collection-Framework Streams Unit-Tests Entwurfsmuster - Eine Einführung GUI-Programmierung Java Virtual Machine JVM - Überblick JVM - Struktur Ausblick Garbage Collection Programmiermethodik - Java Virtual Machine 2

3 JVM - Überblick

4 Java allgemein Architektur von Java Programmiersprache Format für.class-dateien Java-API JVM (Java Virtual Machine) Laufzeitumgebung Abstrakte Maschine Menge von Instruktionen Speicherverwaltung Dynamisches Laden von Klassen (class-loading) Unterstützt Reflection (3. Semester) Verwaltet Nebenläufigkeit (3. Semester) Diese Vorlesung Basiert auf [Venners 2000] Programmiermethodik - Java Virtual Machine 4

5 Programmierumgebung Übersetzungsumgebung Laufzeitumgebung Source A.java B.java C.java Eigene class-dateien A.class B.class C.class Java Compiler Lokal, über Netzwerk etc. Java Virtual Machine A.class B.class C.class Object.class String.class Eigene class-dateien Java-API class-dateien Programmiermethodik - Java Virtual Machine 5

6 Übersetzung Interpretierung (Wiederholung) Übersetzung (Kompilierung) Der Programmcode wird in einen Zielcode (z.b. Maschinencode) umgesetzt. Laufzeitumgebung führt diesen Code aus. Vorteile Effizienz (sowohl Laufzeit als auch Speicher) Nachteile Nicht portierbar (muss neu kompiliert werden) Interpretierung Interpreter liest jede Instruktion. Verifiziert den Code. Gibt den korrekte Code an die Laufzeitumgebung weiter. Vorteile Portierbarkeit Dynamisch, d.h. bei Änderungen muss die Applikation nicht neu gestartet werden. Nachteile Effizienz (langsam) Programmiermethodik - Java Virtual Machine 6

7 Hybrider Ansatz (Java, C#, ) Idee Aus dem Programmcode wird ein portabler Zwischencode erzeugt, der auf verschiedenen Plattformen interpretiert werden kann. MyProg.class MyProg.class MyProg.class MyProg.class Java-Plattform für Linux Java-Plattform für Windows Java-Plattform für TV Java-Plattform für Toaster Linux Rechner Windows Rechner TV Toaster Programmiermethodik - Java Virtual Machine 7

8 Bytecode Zwischencode der von der JVM interpretiert wird. Ein beliebiger (gültiger) Java-Compiler muss gültigen Bytecode erzeugen (.class-dateien). Inhalt Informationen über Klassenhierarchien Methodensignaturen Code von Methoden etc. Referenzen auf andere Klassen Referenzen werden beim Ladeprozess aufgelöst..class-datei Binärdatei Immer big-endian (unabhängig von der darunterliegenden Architektur; most significant bit in niedrigster Adresse) Kompakt (z.b. für Netzwerkübertragung) Programmiermethodik - Java Virtual Machine 8

9 Struktur einer.class-datei [Web 2012] Programmiermethodik - Java Virtual Machine 9

10 Virtuelle Maschine Die virtuelle Maschine unterstützt Plattformunabhängigkeit Sicherheit Mobilität (im Netzwerk) Die JVM ist eine abstrakte Maschine. Spezifikation gibt einige Teile vor (z.b. JVM muss Bytecode interpretieren können). Implementierung wird aber offen gelassen (z.b. unterschiedliche Ansätze den Bytecode zu interpretieren). Hauptaufgaben Klassendateien laden Bytecode in diesen Klassendateien ausführen Programmiermethodik - Java Virtual Machine 10

11 Programmausführung Einfachster Ansatz (in Software) Interpretierung des Bytecodes Just-in-time Übersetzung (JIT) Bytecode wird in Maschinencode übersetzt (beim ersten Aufruf einer Methode). Erzeugter Code kommt in einen Cache, um später darauf zuzugreifen (benötigt mehr Speicher!). Adaptive-Optimizer Interpretierung Oft benutzte Teile werden mit der Zeit (Monitoring) in Maschinencode übersetzt. JVM in Hardware Programmiermethodik - Java Virtual Machine 11

12 JVM in Software (1) Java Virtual Machine Eigene Class-Dateien Class loader Java-API Class-Dateien Bytecode Execution engine Aufruf nativer Methoden Betriebssystem Programmiermethodik - Java Virtual Machine 12

13 JVM in Software (2) Java-Programm interagiert mit dem Betriebssystem über native Methoden. Java hat daher 2 Arten von Methoden Java-Methoden (z.b. im eigenen Java-Programm implementiert) Native Methoden (in C, C++, Assembler und entsprechend übersetzt) Beim Aufruf nativer Methoden lädt die JVM die entsprechenden dynamischen Bibliotheken (plattformabhängig). Eigene native Methoden? JNI (Java Native Interface) Damit ist das entsprechende Programm nicht mehr plattformunabhängig! Programmiermethodik - Java Virtual Machine 13

14 JVM Struktur (Ein kurzer Überblick)

15 Virtuelle Maschine Spezifikation beschreibt das Verhalten an Hand von Subsystemen Speicherbereichen Datentypen Instruktionen Abstrakte Beschreibung Beschreibt das Verhalten der JVM. Beschreibt nicht die genaue innere Architektur! Implementierung hängt vom Entwickler der JVM ab. Programmiermethodik - Java Virtual Machine 15

16 Virtuelle Maschine (Architektur) Class-Dateien Class loader subsystem Method area Heap Java stacks PC registers Native method stacks Laufzeitdatenbereiche Execution engine Schnittstelle für native Methoden Bibliotheken für native Methoden Programmiermethodik - Java Virtual Machine 16

17 Virtuelle Maschine (Datenbereich) Jede JVM hat genau einen Methodenbereich (method area) Bytecode Class-Daten Heap Objektspeicher (alle Objekte werden hier abgelegt) Klassen -daten Klassen -daten Objekt Objekt Klassen -daten Klassen -daten Methodenbereich Klassen -daten Objekt Objekt Heap Objekt Programmiermethodik - Java Virtual Machine 17

18 Virtuelle Maschine (Thread-spezifische Verwaltung) Daten zur Laufzeit Thread 1 Thread 1 Thread 2 Thread 3 Thread 3 Stack frame Stack frame Stack frame Thread 2 Stack frame Stack frame Stack frame Thread 3 Stack frame Stack frame PC-Register Stack frame Java-Stacks Native Methoden Stacks Programmiermethodik - Java Virtual Machine 18

19 Datentypen der JVM Numerische Typen Floating-Point Typen float double Primitive Typen boolean Integrale Typen byte short returnaddress int long Klassentypen char Referenztypen reference Interface-Typen Array-Typen Programmiermethodik - Java Virtual Machine 19

20 Laden von Klassen (Class loading) in der JVM Loading Lokalisierung der binären Repräsentation eines Typs (Klasse, Interface) Laden der Daten Linking Parsen des Typs und Aufnahme in die aktuelle Verwaltung der JVM Verifikation des Codes Vorbereitung Auflösung (von symbolischen Referenzen) Initialization Aufruf des Initialisierers Programmiermethodik - Java Virtual Machine 20

21 Wann wird eine Klasse geladen? Nicht festgelegt Flexible JVM-Spezifikation Loading vor Linking Linking vor Initialization Initialization vor erster Verwendung ( active use ) Active use new-anweisung, implizit bei String, Aufruf einer statischen Methode, Initialisierung einer Subklasse, Aufruf der main-methode usw. Normalerweise wird das Laden möglichst lange hinausgezögert! Ressourcen werden erst dann belegt, wenn sie wirklich benötigt werden. Ist aber keine Anforderung, d.h. Laden kann auch zu einem früheren Zeitpunkt erfolgen! Programmiermethodik - Java Virtual Machine 21

22 Klassenlader Damit der Bytecode von der JVM verarbeitet werden kann, muss ein Klassenlader (class loader) die benötigte Klasse laden. Alle Referenztypen (außer Arrays) werden entweder durch den Bootstrap-Klassenlader oder durch einen benutzerdefinierten Klassenlader geladen. Bootstrap-Klassenlader ist Teil der JVM. Lädt alle Systemklassen Benutzerdefinierte Lader ( normale Java-Klassen) Werden von java.lang.classloader abgeleitet. Können bestimmte Zusatzaufgaben übernehmen. Caching Prefetching spezielle Überprüfungen etc. Programmiermethodik - Java Virtual Machine 22

23 Method Area Nachdem der Klassenlader eine Klasse geladen hat, gibt er Sie an die JVM weiter. Die JVM extrahiert Informationen und speichert diese Informationen über den Typ in der so genannten Method Area. Implementierung Hängt vom JVM Designer ab (Datenstruktur, Größe, Verwaltung ). Für jeden Typ Basisinformationen wie Name (voll qualifiziert), Name der Superklasse, Unterscheidung ob Klasse oder Interface, Zugriffsmodifikatoren, Liste von Interfaces (voll qualifiziert) Zusätzlich: Constant Pool, Attribut- und Methodeninformationen, alle statische Variablen (nicht Konstanten), Referenz auf den Klassenlader, Referenz auf Klasse Class Methodentabellen (für schnellen Zugriff) Programmiermethodik - Java Virtual Machine 23

24 Heap Innerhalb einer JVM gibt es einen Heap. Alle Threads eines Programms teilen sich diesen. Jedes Programm läuft aber in einer eigenen JVM-Instanz! Bei der Objekterzeugung (auch Array) wird Speicher vom Heap angefordert Die JVM hat eine Instruktion um Speicher anzufordern. Es existiert aber keine Instruktion für die Freigabe. Speicherfreigabe erfolgt durch den sogenannten Garbage-Collector. Programmiermethodik - Java Virtual Machine 24

25 Objektrepräsentation (1) Objektrepräsentation ist nicht festgelegt. Beispiel: Monolithische Repräsentation Objektreferenz Ptr auf Heap Ptr auf Klassendaten Instanzdaten Instanzdaten Instanzdaten Heap Klassen -daten Methodenbereich Programmiermethodik - Java Virtual Machine 25

26 Objektrepräsentation (2) Geteilte Repräsentation Objektreferenz Ptr auf Heap Handle-Pool Ptr auf Objektpool Ptr auf Klassendaten Objektpool Instanzdaten Instanzdaten Heap Klassen -daten Methodenbereich Programmiermethodik - Java Virtual Machine 26

27 Spezielles Beispiel mit Arrays int [][] ar = new int [2][2]; ar (Arrayreferenz) Ptr auf Klassendaten length (=2) ar[0] (Arrayreferenz) ar[1] (Arrayreferenz) Heap Ptr auf Klassendaten length (=2) ar[0][0] (int) ar[0][1] (int) Ptr auf Klassendaten length (=2) ar[1][0] (int) ar[1][1] (int) Klassen daten für [[ ]] Klasse ndaten für [ ] Methodenbereich Programmiermethodik - Java Virtual Machine 27

28 Vererbung Code für Methoden wird bei der Vererbung nicht dupliziert! Z.B. Klasse C1 und C2 teilen sich den Code von m1() C1 ~x : int +m1() C2 ~y : int C1 o1 = new C1(); C2 o2 = new C2(); o2.m1(); o2.x = 10; o2.y = 10; Code von C1 C2 hat ein lokales x! Nicht gemeinsam! +m2() Programmiermethodik - Java Virtual Machine 28

29 Vererbung (Implementierung) Referenz auf Superklasse Methodenbereich Instanzenraum m1() m2() x x y Speicher C1 C2 o1 o2 Programmiermethodik - Java Virtual Machine 29

30 Dynamisches Binden (1) ~x : int +m1() +isnull() : boolean ~y : int C1 C2 +m2() +isnull() : boolean C1 c; C1 o1 = new C1(); C2 o2 = new C2(); boolean b; if( ) c = o1; else Dynamisches Binden! c = o2; b = c.isnull(); Programmiermethodik - Java Virtual Machine 30

31 Dynamisches Binden (2) Jede Klasse hat eine so genannte Dispatch-Tabelle. Ziel: Operation mit Methode verknüpfen. Tabelle hat eine Liste der Methoden, die in der Klasse implementiert werden und einen Pointer auf die Superklasse. Lookup zur Laufzeit Performance!? Dispatch-Tabelle c.isnull() C1 m1() isnull() m2() isnull() x x C2 y Speicher o1 o2 Programmiermethodik - Java Virtual Machine 31

32 Stack Für jeden Thread wird ein eigener Stack verwaltet. Stack verwaltet so genannte Frames. Die JVM führt nur 2 Operationen auf den Stack direkt aus. push und pop (von Frames) Aktuelle Ausführung current method (Methode die aktuell ausgeführt wird) current frame current class (Klasse, in der die Methode definiert ist) current constant pool (Konstanten der aktuellen Klasse) JVM verwaltet die Ausführung. Wenn die JVM auf Operationen trifft, die auf Daten im aktuellen Frame operieren, dann führt sie diese im aktuellen Frame aus. Tatsächliche Verwaltung des Stacks ist implementierungsabhängig! Programmiermethodik - Java Virtual Machine 32

33 Frame Wird beim Aufruf einer Methode erzeugt. Wenn ein Thread eine Methode aufruft. Die ausführende Methode speichert Parameter, lokale Variablen, Zwischenresultate und weitere Daten in diesem Frame. Beendigung einer Methode Normal Durch Ausnahme Bei Beendigung nimmt die JVM den Frame vom Stack und verwirft ihn. Der Frame der vorhergehenden Methode (aufrufenden Methode) wird zum current frame. Programmiermethodik - Java Virtual Machine 33

34 Aufbau eines Frames 3 Bereiche Lokale Variablen Array Über Index Zugriff auf Variablen Operandenstack Array nach dem Stack-Prinzip verwaltet Arbeitsplatz für die JVM JVM hat daher eine Stack-basierte Architektur! Frame-Daten Constant pool resolution Verwaltung von Ausnahmen Größe Speicherplatzanforderung für lokale Variablen und Operandenstack wird zur Übersetzungszeit berechnet und für jede Methode in die class-datei eingefügt (Größe der Frame-Daten implementierungsabhängig). Beim Aufruf einer Methode werden diese Daten verwendet. Programmiermethodik - Java Virtual Machine 34

35 JVM-Instruktionen (1) JVM-Instruktion opcode (1 Byte) für die Instruktion die ausgeführt werden muss 0 oder mehrere Operanden (1 oder mehrere Bytes) für die Operation Innere Schleife der JVM execution engine (ohne Ausnahmen) do { fetch an opcode; if (operands) fetch operands; execute the action for the opcode; } while (there is more to do); Programmiermethodik - Java Virtual Machine 35

36 JVM-Instruktionen (2) Die meisten Operationen nehmen Operanden vom Stack und geben das Resultat auf den Stack. Viele Instruktionen haben mehrere Versionen. Abhängig von den Typen der Operanden Unterscheidung durch Präfix i,l,f,d,b,s,c,a Beispiele iload Integer laden dload Double laden. Programmiermethodik - Java Virtual Machine 36

37 JVM-Instruktionen (3) Unterschiedliche Typen Laden/Speichern (z.b. load, store, push, lcd, wide..) Arithmetik/Logische Operationen (z.b. add, sub, mul, shl, shr, or, xor.. Typkonvertierung (z.b. i2l, i2f, i2b, ) Objekterzeugung/-manipulation (z.b. new, newarray, aload, astore, ) Operandenstack-Management (z.b. pop, pop2, swap.) Kontrollfluss (z.b. ifeq, iflt, ifle, ifne, tableswitch, lookupswitch,..) Methodenaufruf (z.b. invokevirtual, invokeinterface, invokestatic, invokespecial.) Ausnahmen/finally Programmiermethodik - Java Virtual Machine 37

38 public class Example { } Parameter (Beispiel) public static int runclassmethod(int i, long l, float f, double d, } return 0; Object o, byte b) { public int runinstancemethod(char c, double d, short s, boolean b) { } return 0; runclassmethod() index type parameter int long float double reference int int i long l float f double d Object o byte b runinstancemethod() index type parameter reference int double int int hidden this char c double d short s boolean b Programmiermethodik - Java Virtual Machine 38

39 Operandenstack (Beispiel) iload_0 iload_1 iadd istore_2 Vor der Ausführung Nach iload_0 Nach iload_1 Nach iadd Nach istore_2 lokale Variablen Operanden- Stack Programmiermethodik - Java Virtual Machine 39

40 Bytecode anzeigen javap javap ist ein Disassembler Defaultmäßig gibt er nur die öffentliche Schnittstelle aus. -c gibt den Code für alle Methoden aus. -l gibt den Code für alle Variablen aus. -private zeigt alle Variablen und Klassen. -s für interne Typsignaturen. Weitere Informationen: Programmiermethodik - Java Virtual Machine 40

41 Beispiel (1) public class FactorialTest { public static int factorial(int n) { return (n == 0)? 1 : n * factorial(n - 1); } } public static void main(string[] args) { for (int i = 1; i < 10; i++) { System.out.println(factorial(i)); } } javap c FactorialTest: Compiled from "FactorialTest.java" public class FactorialTest { public FactorialTest(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/object."<init>":()v 4: return Programmiermethodik - Java Virtual Machine 41

42 Beispiel (2) } public static int factorial(int); Code: 0: iload_0 1: ifne 8 4: iconst_1 5: goto 16 8: iload_0 9: iload_0 10: iconst_1 11: isub 12: invokestatic #2 // Method factorial:(i)i 15: imul 16: ireturn public static void main(java.lang.string[]); Code: 0: iconst_1 1: istore_1 2: iload_1 3: bipush 10 5: if_icmpge 24 8: getstatic #3 // Field java/lang/system.out:ljava/io/printstream; 11: iload_1 12: invokestatic #2 // Method factorial:(i)i 15: invokevirtual #4 // Method java/io/printstream.println:(i)v 18: iinc 1, 1 21: goto 2 24: return Programmiermethodik - Java Virtual Machine 42

43 Java 7 Bytecode für die JVM kann im Prinzip von beliebigen Programmiersprachen kommen (sofern ein Compiler existiert, der gültigen Bytecode erzeugt). Es existieren zum Beispiel Bytecode-Compiler für Python oder Ruby. Problem: Diese Sprachen sind dynamisch typisierte Sprachen! Java und die JVM sind aber auf statische Typspezifizierung zur Übersetzungszeit ausgelegt. Nur mit Tricks (und Performance-Verlust) können dynamisch typisierte Sprachen in Bytecode übersetzt werden. Daher wurde eine neue Bytecode-Instruktion (invokedynamic) eingeführt (wird aber vom Java-Compiler ignoriert). Aufruf einer beliebigen Methode ist erlaubt, ohne dass geprüft wird, zu welcher Klasse diese Methode gehört, von welchem Typ ihr Returnwert ist oder welche Methodenparameter sie verwendet. Erhöht die Performance für dynamisch typisierte Sprachen. Programmiermethodik - Java Virtual Machine 43

44 Bytecode in Quellcode umwandeln (1) Ein Decompiler wandelt Java-Klassendateien in Java- Quellcodedateien zurück. Reverse Engineering Decompiler gibt es auch für andere Sprachen, in Java ist aber das Wiederherstellen des ursprünglichen Codes recht einfach. Bytecode enthält viele Hinweise für den Interpreter. Ein Decompiler benötigt lediglich die Klassendatei. Einige Decompiler arbeiten auch direkt mit einem jar-archiv. Aus dem Java-Bytecode für eine Methode baut er dann einen Kontrollfluss-Graphen auf. Der Decompiler versucht Ausdrücke zu erkennen, die bei der Übersetzung bestimmter Sprachkonstrukte entstanden sein müssten. Programmiermethodik - Java Virtual Machine 44

45 Bytecode in Quellcode umwandeln (2) Wann ist das legal? Bei eigenem Programm Solange fremde Software nicht verändert wird (?) Nicht mehr, wenn fremde Software als Eigenleistung verkauft wird!!!!!! Programmiermethodik - Java Virtual Machine 45

46 Jad Ein Decompiler Ist ein frei verfügbarer Decompiler Sehr schnell (in C++ geschrieben) Kann auch Bytecode anzeigen. Kann auch verschleierten Code teilweise rekonstruieren. Wird aber nur den gegebenen Code rekonstruieren. Generics sind dann zum Beispiel nicht mehr vorhanden! Aufruf jad example.class (Ausgabe in example.jad) jad -sjava example.class (Ausgabe in example.java) Weitere Infos: Rückübersetzung erschweren Sogenannte Obfuscater verändern den Code. Decompiler kann dann oft keine richtige Entscheidung treffen. Programmiermethodik - Java Virtual Machine 46

47 Garbage-Collection

48 Speicherplatzfreigabe In C free() gibt belegten Speicherplatz frei. Fehleranfällig! In C++ Konstruktor/Destruktor (Erzeugung, Freigabe) Auch fehleranfällig! In einem objektorientierten System sollten Objekte verfügbar sein, solange sie benutzt werden. Die Laufzeitumgebung sollte nicht mehr benutzte Objekte entfernen (und damit den Speicherplatz freigeben). Programmiermethodik - Java Virtual Machine 48

49 Garbage Nicht benutzte Objekte Kein anderes Objekt hat eine Referenz auf dieses Objekt. Niemand kann eine Nachricht an dieses Objekt senden. Objekt ist nicht mehr nützlich ( Müll ). Garbage-Collector Ist ein spezieller Prozess. Sammelt periodisch nicht benutzte Objekte ein und gibt den Speicher frei. Erweiterungen werden noch besprochen. JVM Art der Garbage-Collection ist nicht explizit vorgegeben. Es muss nicht einmal ein Garbage-Collector vorhanden sein. Programmiermethodik - Java Virtual Machine 49

50 Beispiel Complex c1, c2; c1 = new Complex(); c1 = c2; c1 c2 new Complex() Complex Speicher c1 c2 new Complex() Complex Speicher Garbage!! Verschiedene Ansätze für Garbage-Collection! Programmiermethodik - Java Virtual Machine 50

51 Garbage-Collection allgemein 2 Gründe für Garbage-Collection Speicher freigeben JVM kann diese Aufgabe übernehmen (automatisieren). Fragmentierung des Heaps unterbinden bzw. verringern. Für eine neue Allokation wird zusammenhängender Speicher benötigt. Freigabe mehrerer Objekte muss nicht zusammenhängenden freien Speicher freigeben. Nachteil Zusätzlicher Speicheraufwand CPU-Aufwand wenn der Garbage-Collector anläuft Längere Laufzeit Unterschiedliche Algorithmen Basierend auf Referenzzähler Tracing-Algorithmen (basierend auf Erreichbarkeitsgraphen) Programmiermethodik - Java Virtual Machine 51

52 Reference Counting Jedes Objekt hat einen Zähler rc. Bei der Erzeugung: rc=1 Kommt eine neue Referenz hinzu: rc++ Wird eine Referenz entfernt: rc -- Wenn rc==0 dann kann der Garbage-Collector das Objekt einsammeln. Vorteile Verteilung der Last (aber viel Last!) Gute Lokalität, schnelle Reaktion Nachteile Zusätzlicher Speicherbedarf Zyklen werden nicht erkannt! Programm O1 und O2 werden nicht mehr von P (im Programm) referenziert. Referenzieren sich aber gegenseitig, d.h. rc==1. P rc(o1) == 1 O1 O2 rc(o2) == 1 Programmiermethodik - Java Virtual Machine 52

53 Mark-and-Sweep Definiert Wurzel und überprüft Erreichbarkeit. Wurzel (root set) = Objekte die immer existieren Objekte, die man von der Wurzel aus nicht erreichen kann, werden entfernt. Mark and Sweep Graph von der Wurzel aus aufbauen. Alle erreichten Objekte markieren. Entferne nicht markierte Objekte. Setze alle markierten Objekte auf nicht-markiert. Vorteil Kein Problem mit Zyklen Nachteile Fragmentierung Aufwand proportional zur Heap-Größe Programmiermethodik - Java Virtual Machine 53

54 Stop-and-Copy (1) Heap wird in 2 gleich große Bereiche unterteilt. fromspace und tospace Bei einem Durchlauf werden die Rollen der Bereiche vertauscht. Bei einem Durchlauf werden die aktuellen Teile vom alten Bereich (fromspace) in den neuen Bereich (tospace) kopiert Programmvariablen benutzen den neuen Bereich. Garbage im fromspace wird einfach entfernt. Im tospace wird beim Kopieren automatisch Fragmentierung unterbunden. Programmiermethodik - Java Virtual Machine 54

55 Stop-and-Copy (2) Beispiel frei frei unbenutzt unbenutzt unbenutzt frei unbenutzt unbenutzt unbenutzt frei frei unbenutzt Stop and Copy Vorteile Allokation schnell und billig Keine Fragmentierung Nachteile 50% des Heaps nicht benutzt Langlebige Objekte werden immer wieder kopiert. Programmiermethodik - Java Virtual Machine 55 Stop and Copy

56 Generational Collectors (1) Ein Problem (neben der nicht effizienten Auslastung des Speichers) von Stop-and-Copy ist, dass jedes erreichbare Objekt immer wieder kopiert werden muss. Dies kann verbessert werden, wenn folgende empirischen Erkenntnisse berücksichtigt werden: Die meisten Objekte haben eine sehr kurze Lebenszeit und werden sehr bald nach der Erzeugung nicht mehr benötigt. Einige Objekte haben eine sehr lange Lebenszeit und sind der Hauptgrund für die Ineffizienz von Stop-and-Copy (werden immer wieder kopiert). Programmiermethodik - Java Virtual Machine 56

57 Generational Collectors (2) Vorgehensweise (allgemein) Heap wird in 2 oder mehrere Sub-Heaps unterteilt. Jeder Sub-Heap verwaltet eine Generation von Objekten. Die jüngste Generation wird am öftesten überprüft. Die meisten Objekte werden sehr schnell freigegeben und können eingesammelt werden. Übersteht ein Objekt eine bestimmte Anzahl von Garbage-Collection- Durchläufen, dann wird es in den nächsten Heap verschoben. Je älter die Generation in einem Heap, desto seltener wird dieser Heap überprüft. Kombination mit herkömmlichen Methoden Mark-and-Sweep Stop-and-Copy Programmiermethodik - Java Virtual Machine 57

58 Weitere Algorithmen, Methoden etc. Garbage-Collection kann sehr aufwändig sein. Algorithmus benötigt bestimmte Zeit für das Abarbeiten des Heaps (der Heaps). Laufendes Programm wird angehalten ( Stop the world -Prozess). Großes Problem bei interaktiven Programmen. Sehr großes Problem bei Echtzeitsystemen. Inkrementelle Anwendung Algorithmus bearbeitet nicht den gesamten Heap (nur Teile davon). Die Zeit für den kleineren Durchlauf kann leichter nach oben beschränkt werden. Heapgrößen für unterschiedliche Generationen festlegen. Die Zeit für den Durchlauf eines Heaps kann beschränkt werden. Die älteste Generation darf aber nicht beschränkt sein. Für diese muss man sich einen speziellen Algorithmus überlegen. Programmiermethodik - Java Virtual Machine 58

59 Garbage-Collection und Programmierer Garbage-Collection ist nicht vorhersagbar! In viele Fällen macht sich die Garbage-Collection nicht bemerkbar. Aber schlecht für Echtzeitsysteme! Allgemeine Regeln Nur notwendigen Speicher anfordern! Nicht Referenzen horten! Z.B. nicht benötigte Einträge in einem Array auf null setzen! Aufruf von System.gc() Manchmal sinnvoll Was macht der Garbage-Collector an dieser Stelle? Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects. Programmiermethodik - Java Virtual Machine 59

60 Objektreferenzen Unterschiedliche Arten von Referenzen: Stufen der Erreichbarkeit Strongly reachable Bisher besprochen Garbage-Collector kann Objekte mit solchen Referenzen nicht einsammeln. Softly reachable Weakly reachable Phantomly reachable Unreachable (bisher besprochen - wenn keine Referenz) Programmiermethodik - Java Virtual Machine 60

61 Soft-Referenzen Objekte die darüber referenziert werden, werden erst dann eingesammelt, wenn der Speicher knapp wird. Spezifikation verlangt nur, dass diese Objekte eingesammelt werden, bevor es zu einem OutOfMemory-Error kommt. Soft-Referenzen werden für Caching verwendet. Ältere Objekte werden zuerst eingesammelt. Mit der Methode get() bekommt man den Inhalt (das Objekte) der Referenz oder null, wenn das Objekt vom Garbage-Collector eingesammelt wurde Beispiel (Ausgeben des Inhalts) SoftReference<Integer> i = new SoftReference<Integer>(1000); System.out.println(i.get()); Programmiermethodik - Java Virtual Machine 61

62 Weak-Referenzen Objekte die darüber referenziert werden, werden eingesammelt, wenn sie nur mehr über Folgen von Referenzen referenziert werden, die alle zumindest eine Weak-Referenz enthalten. Sobald der Garbage-Collector anläuft, werden diese Objekte eingesammelt. Beispiel WeakReference<Integer> i2 = new WeakReference<Integer>(1200); System.out.println(i2.get()); Programmiermethodik - Java Virtual Machine 62

63 Soft- und Weak-Referenzen (Vergleich) Beispiel (in Verbindung mit unterschiedlichen Referenzen) SoftReference<Integer> i = new SoftReference<Integer>(1000); WeakReference<Integer> i2 = new WeakReference<Integer>(1200); System.out.println(i.get()); // 1000 System.out.println(i2.get()); // 1200 System.gc(); System.out.println(i.get()); // 1000 System.out.println(i2.get()); // null Programmiermethodik - Java Virtual Machine 63

64 Phantom-Referenzen Auf diese kann man nicht mehr zugreifen. Ermöglichen sauberes Einsammeln der Objekte. Ähnlich wie finalize-methode, aber flexibler. get() liefert immer null. Anwendungsgebiete sind Abschlussaktionen allgemeiner Art, die sich nicht auf ein bestimmtes Exemplar beziehen und bei denen es ausreicht, festzustellen, dass ein Objekt finalisiert wurde, ohne zu wissen, welches konkrete Objekt es war oder zu welcher Klasse es gehörte. Programmiermethodik - Java Virtual Machine 64

65 Referenzpfade Objekte können vom root set ausgehend über mehrere Pfade erreicht werden. Die schwächste Referenz auf dem stärksten Pfad bestimmt die Erreichbarkeit. Root set Phantom- Referenz Weak- Referenz Soft- Referenz Erreichbarkeit von Some Object: Soft Some Object Programmiermethodik - Java Virtual Machine 65

66 finalize Methode finalize() kann in jeder Klasse überschrieben werden (von Object geerbt). Wird vom Garbage-Collector ausgeführt. Daher kann man nie genau sagen, wann finalize() ausgeführt wird. Sollte vermieden werden (wenn nicht unbedingt notwendig)! Sollte möglichst wenig Zeit und Ressourcen verbrauchen! Allgemeine Form protected void finalize() throws Throwable { try {... /*Freigabe etc.*/ } finally { super.finalize(); } } Programmiermethodik - Java Virtual Machine 66

67 Garbage-Collection in der JVM (1) JVM Mehrere Algorithmen Generational Collection Standardeinstellung meist ausreichend Generations Default-Anordnung sieht ungefähr so aus Programmiermethodik - Java Virtual Machine 67

68 Garbage-Collection in der JVM (2) Parameter Garbage-Collection kann parametrisiert werden (bei Aufruf von java). Beispiele -Xms: Anfängliche Heap-Größe -Xmx: Maximale Heap-Größe -XX:MinHeapFreeRatio: Minimales Verhältnis freier/belegter Speicher -XX:MaxHeapFreeRatio: Maximales Verhältnis freier/belegter Speicher Weitere Beispiele: Parameter für Generationen Parameter für unterschiedliche Typen Programmiermethodik - Java Virtual Machine 68

69 Ausblick JVM Umfangreiche Spezifikation Programmierer muss sich nur an die Spezifikation halten, kann aber selbst viele Implementierungsentscheidungen treffen. JVM ist mittlerweile recht ausgereift, d.h. recht stabil. JVM und Java Ursprünglich starke Verbindung zwischen JVM und Java. Mittlerweile gibt es viele andere Sprachen, die JVM-Bytecode erzeugen. Weitere Informationen Garbage Collection unterliegt ständigen Umbauten: (Java7=G1; Java8=Metaspace) Programmiermethodik - Java Virtual Machine 69

70 Literatur

71 Literatur [Venners 2000] Bill Venners, Inside the Java 2 Virtual Machine, McGraw-Hill Companies, 2000, online (ausgewählte Kapitel): [Web 2012] Programmiermethodik - Java Virtual Machine 71

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

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

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

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

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

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

Praktikum Compilerbau Sitzung 9 Java Bytecode

Praktikum Compilerbau Sitzung 9 Java Bytecode Praktikum Compilerbau Sitzung 9 Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald IPD Snelting, Lehrstuhl für Programmierparadigmen KIT Universität des Landes Baden-Württemberg

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

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

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

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

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland. 1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache

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

Ü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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

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

.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

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

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

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

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

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Objektorientierte Programmierung OOP

Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte

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

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Diplomarbeit Antrittsvortrag

Diplomarbeit Antrittsvortrag Diplomarbeit Antrittsvortrag Christian Müller Run-time byte code compilation, interpretation and optimization for Alice Betreuer: Guido Tack Verantwortlicher Prof.: Gert Smolka Die nächsten 15 Minuten...

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

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Testen mit JUnit. Motivation

Testen mit JUnit. Motivation Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen

Mehr

Übungen zur Softwaretechnik

Übungen zur Softwaretechnik Technische Universität München Fakultät für Informatik Lehrstuhl IV: Software & Systems Engineering Markus Pister, Dr. Bernhard Rumpe WS 2002/2003 Lösungsblatt 9 17. Dezember 2002 www4.in.tum.de/~rumpe/se

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen 4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen Highlights: objektorientierte Sprache Plattformunabhängigkeit bei Hardware und Betriebssystem optimale Einbindung im Internet und Intranet

Mehr

CADEMIA: Einrichtung Ihres Computers unter Windows

CADEMIA: Einrichtung Ihres Computers unter Windows CADEMIA: Einrichtung Ihres Computers unter Windows Stand: 21.02.2015 Java-Plattform: Auf Ihrem Computer muss die Java-Plattform, Standard-Edition der Version 7 (Java SE 7) oder höher installiert sein.

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

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

Java Bytecode Eike Robert Freie Universität Berlin. Softwareprojekt Übersetzerbau, 2013

Java Bytecode Eike Robert Freie Universität Berlin. Softwareprojekt Übersetzerbau, 2013 Java Bytecode Eike Robert Freie Universität Berlin Softwareprojekt Übersetzerbau, 2013 Inhalt Bytecode Allgemein Architektur Aufbau Instruktionsgruppen Beispiel FU Berlin, Bytecode, Übersetzerbau 2013

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" 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

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Kompilieren und Linken

Kompilieren und Linken Kapitel 2 Kompilieren und Linken Bevor wir uns auf C++ selbst stürzen, brauchen wir einiges Vorgeplänkel, wie man komfortabel ein größeres C++- kompilieren kann. Mit Java stellt sich der Kompiliervorgang

Mehr

Version 0.3. Installation von MinGW und Eclipse CDT

Version 0.3. Installation von MinGW und Eclipse CDT Version 0.3 Installation von MinGW und Eclipse CDT 1. Stellen Sie fest, ob Sie Windows in der 32 Bit Version oder in der 64 Bit Version installiert haben. 2. Prüfen Sie, welche Java Runtime vorhanden ist.

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

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

Factory Method (Virtual Constructor)

Factory Method (Virtual Constructor) Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

CADEMIA: Einrichtung Ihres Computers unter Linux mit Oracle-Java

CADEMIA: Einrichtung Ihres Computers unter Linux mit Oracle-Java CADEMIA: Einrichtung Ihres Computers unter Linux mit Oracle-Java Stand: 21.02.2015 Java-Plattform: Auf Ihrem Computer muss die Java-Plattform, Standard-Edition der Version 7 (Java SE 7) oder höher installiert

Mehr

OLXTeamOutlook 1.5 für Outlook 2003, 2002/XP, 2000 und 97/98

OLXTeamOutlook 1.5 für Outlook 2003, 2002/XP, 2000 und 97/98 OLXTeamOutlook 1.5 für Outlook 2003, 2002/XP, 2000 und 97/98 Neue Version: Outlook-Termine, Kontakte, Mails usw. ohne Exchange-Server auf mehreren Rechnern nutzen! Mit der neuesten Generation intelligenter

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

Verwendung des IDS Backup Systems unter Windows 2000

Verwendung des IDS Backup Systems unter Windows 2000 Verwendung des IDS Backup Systems unter Windows 2000 1. Download der Software Netbackup2000 Unter der Adresse http://www.ids-mannheim.de/zdv/lokal/dienste/backup finden Sie die Software Netbackup2000.

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Kapitel 6. Vererbung

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

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch Ein Blick voraus des Autors von C++: Bjarne Stroustrup 04.06.2005 Conrad Kobsch Inhalt Einleitung Rückblick Nur eine Übergangslösung? Was würde C++ effektiver machen? Quelle 2 Einleitung Wo steht C++,

Mehr

Drucken aus der Anwendung

Drucken aus der Anwendung Drucken aus der Anwendung Drucken aus der Anwendung Nicht jeder Großformatdruck benötigt die volle Funktionsvielfalt von PosterJet - häufig sind es Standarddrucke wie Flussdiagramme und Organigramme die

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

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 1. Vorwort 1 2. Systemvoraussetzungen 2 3. Programmarten 2 4. Sicherheit der Endnutzer 2 5. Handhabung 3 5.1 allgemeine Programmübersicht 3 5.2

Mehr

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger Grundlegendes Oracle9i PostgreSQL Prevayler Memory mywms bietet umfangreiche Konfigurationsmöglichkeiten um die Daten dauerhaft zu speichern.

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

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

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

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

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

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

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

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

Formular»Fragenkatalog BIM-Server«

Formular»Fragenkatalog BIM-Server« Formular»Fragenkatalog BIM-Server«Um Ihnen so schnell wie möglich zu helfen, benötigen wir Ihre Mithilfe. Nur Sie vor Ort kennen Ihr Problem, und Ihre Installationsumgebung. Bitte füllen Sie dieses Dokument

Mehr

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) 1 Einleitung... 2 2 Download und Installation... 3 2.1 Installation von WindowsXPMode_de-de.exe... 4 2.2 Installation von Windows6.1-KB958559-x64.msu...

Mehr

Einführung in die Informatik Tools

Einführung in die Informatik Tools Einführung in die Informatik Tools Werkzeuge zur Erstellung von Softwareprojekten Wolfram Burgard 8.1 Motivation Große Softwareprojekte werden schnell unübersichtlich. Änderungen im Code können leicht

Mehr

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik Echtzeit 2010 Alexej Schepeljanski Martin Däumler Matthias Werner Echtzeit 2010 / 18. November 2010

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

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

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Proxy. Krishna Tateneni Übersetzer: Stefan Winter Krishna Tateneni Übersetzer: Stefan Winter 2 Inhaltsverzeichnis 1 Proxy-Server 4 1.1 Einführung.......................................... 4 1.2 Benutzung.......................................... 4 3 1

Mehr

S7-Hantierungsbausteine für R355, R6000 und R2700

S7-Hantierungsbausteine für R355, R6000 und R2700 S7-Hantierungsbausteine für R355, R6000 und R2700 1. FB90, Zyklus_R/W Dieser Baustein dient zur zentralen Kommunikation zwischen Anwenderprogramm und dem Modul R355 sowie den Geräten R6000 und R2700 über

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002

Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002 Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002 Prüfungsaufgaben zu den Vorlesungen Datenverarbeitung im ersten und im zweiten Semester Aufgabensteller: Gleißner Die Lösungen sind auf das

Mehr

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

ObjectBridge Java Edition

ObjectBridge Java Edition ObjectBridge Java Edition Als Bestandteil von SCORE Integration Suite stellt ObjectBridge Java Edition eine Verbindung von einem objektorientierten Java-Client zu einer fast beliebigen Server-Komponente

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

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr