Untersuchung der Einsetzbarkeit von Echtzeit-Java in der Radarsignalverarbeitung

Größe: px
Ab Seite anzeigen:

Download "Untersuchung der Einsetzbarkeit von Echtzeit-Java in der Radarsignalverarbeitung"

Transkript

1 Untersuchung der Einsetzbarkeit von Echtzeit-Java in der Radarsignalverarbeitung Ralf Holzheu 30. Oktober 2004 Ralf Holzheu Fachhochschule Ulm Studiengang Technische Informatik Sommersemester 2004 Diplomarbeit wurde angefertigt bei: EADS Ulm Radartechnik, Abteilung OPE 52 Wörthstrasse Ulm Firmenbetreuung durch: Dr. T. Mahr betreuende Professoren: Prof. Dr. rer. nat. K. Ressel Prof. Dr. T. Hasbargen 1

2 3 Echtzeitprogrammierung mit Java 3.1 Eignung von Java für Echtzeitsysteme [BHK2000]Die Grundgesetze der Echtzeitfähigkeit werden mit Java nicht außer Kraft gesetzt. Das heisst: garantierte kurze Reaktionszeiten können nur erreicht werden, wenn gerade laufende Aktivitäten zu jeder Zeit unterbrochen und durch die angeforderte Tätigkeit höherer Priorität solange verdrängt werden können, bis die geforderte Reaktion erfolgt ist. Betriebssysteme unterstützen dies durch ein prioritätsgesteuertes, preemptives Multitasking. Die unverzügliche Unterbrechbarkeit einer gerade laufenden Aktivität heisst, dass Java-Threading ebenfalls prioritätsgesteuert und preemptiv realisiert werden muss. In der Java-Spezifikation werden Thread-Prioritäten definiert, es werden jedoch keine Aussagen darüber gamacht, wie die Abarbeitung genau zu erfolgen hat. Für eine harte Echtzeitfähigkeit kann aus diesem Grund ein preemptives Threading gewählt werden, ohne die Java-Spezifikation zu verletzen. Wird ein Java-System aufbauend auf einem Betriebssystem realisiert, so heisst dies, dass Java-Threads auf die Threads oder Tasks des darunter liegenden Betriebssystem abgebildet werden müssen, siehe Abbildung 9. Abbildungsschicht für Thread-Management Aufrufe - Erzeugung - Synchronisation -... OS-Task/Thread Java-Thread Java-Thread OS-Task/Thread OS-Task/Thread OS - Win2k - vxworks -... Java-Thread OS-Task/Thread OS-Task/Thread Abbildung 9: Abbildung von Java-Threads auf native Task. Quelle: [BHK2000] So ist sichergestellt, dass der höchstpriore Java-Thread auch die höchste Priorität des Gesamtsystems haben kann. Ein auf ein Betriebssystem aufsetzendes Java-System kann nicht echtzeitfähiger sein als das unterlagerte System. Höchste Priorität für einen Anwender-Thread ist nicht immer gleich bedeutend mit höchster Priorität im gesamten System. Dies ist der Unterschied zwischen einem System mit harter Echtzeitfähigkeit und einem nichtechtzeitfähigen System wie Win2k oder Unix. Es muss immer die Prioritätsstruktur des Gesamtsystems betrachtet werden. Entscheidend in einem nichtechtzeitfähigen EADS Deutschland GmbH 30 von 75

3 System ist, dass Systemleistungen wie z.b. Ein-Ausgabe-(EA)-Treiber höhere Priorität besitzen als der höchstpriore Anwenderthread. Eine Obergrenze für die Reaktionszeit t R lässt sich nicht angegeben, weil diese vom EA-Verkehr abhängig ist. Folgedessen kann die Einhaltung einer oberen Schranke nicht garantiert werden. Bei einem Echtzeitbetriebssystem-Kern werden die zulässigen Prioritäten für Anwendungen nicht auf einen bestimmten (niederprioren) Ausschnitt des gesamten Prioritätsbereiches des Systems eingeschränkt. Anwender-Threads können eine höhere Priorität als System-Threads besitzen. Dies hat zur Folge, dass eine solche höchstpriore Anwendung immer das gleiche Reaktionsverhalten zeigt unabhängig davon, wie sonstige Aktivitäten, z.b EA-Treiber, das System belasten. Die Prioritätsstruktur eines solchen Systems zeigt, Abbildung 10. Gemeinsamer, permanenter Adressraum Anwender Interrupt Handler Interrupts Interrupt Handler Priorität System Threads/Tasks z.b. EA-Treiber Anwender Threads/Tasks Abbildung 10: Prioritätsstruktur eines Echtzeitsystems. Quelle: [BHK2000] EADS Deutschland GmbH 31 von 75

4 Wenn ein preemptives Multithreading wie bei Echtzeitbetriebssystem-Kernen (engl. realtimekernel) realisiert werden kann, und wenn durch die Vorabübersetzung AOT (engl. ahead of time) in Maschinencode eine schnelle und deterministische Befehlsabarbeitung möglich ist, was macht dann übliche Java- Systeme nicht echtzeitfähig? Die Antwort liegt in der automatischen Speicherplatzverwaltung durch den Garbage Collector (GC). Eines der grössten Probleme hinsichtlich vorhersagbaren Verhaltens eines zeitkritischen Tasks ist der Garbage Collector. Ein Garbage Collector verwaltet und organisiert den Heap, nichtreferenzierte Objekte werden gelöscht, und der Speicher wird defragmentiert. Der GC ist höher priorisiert als ein java.lang.thread und kann somit alle Anwenderthreads auf unbestimmte und unvorhersehbare Zeit unterbrechen. Abbildung 11 illustriert das Verhalten des GC einer Standardimplementierung. Allokierte Objekte werden durch den GC auf dem Heap verwaltet und damit der Kontrolle des Programmierers entzogen. Echtzeitverhalten ist dadurch nicht möglich. Abbildung 11: Anwendungsthreads werden vom Garbage Collector unterbrochen. Quelle: aicas Garbage Collection Das Speichermanagement in Java unterscheidet sich von dem in Sprachen wie C und C++. Ein Programm muss keine Prozeduren wie malloc() oder free() aufrufen, um Speicher zuzuweisen oder freizugeben, sondern erhält von der Java-Runtime-Environment einen Automatismus bereitgestellt der den Speicher verwaltet. Dieser Automatismus heißt Garbage Collector. Die Aufgabe des Garbage Collector ist es: nicht referenzierte Objekte auf dem Heap zu detektieren und dessen Speicher freigeben. die Heapfragmentierung so gering wie möglich zu halten. Um herauszufinden, welche Objekte nicht mehr referenziert werden, werden sogennante Wurzelknoten (engl. roots ) angelegt und die Erreichbarkeit der einzelnen Elemente von diesen Wurzeln untersucht. Ein Objekt ist erreichbar, wenn es einen Pfad von Referenzen ausgehend von der Wurzel gibt, über die ein Programm das Objekt erreichen kann. Die Wurzeln sind immer vom Programm erreichbar. Der Mark-Sweep-Compact Algorithmus besteht aus vier Phasen (Abbildung 1. Die Aufgabe der ersten Phase ist es, alle Wurzelelemente zu markieren. In der zweiten Phase werden alle root Objekte rekursiv durchlaufen, alle referenzierbare Objekte detektiert und markiert. Anschliessend scannt der GC-Algorithmus in der dritten Phase den Heap und sucht nach nicht markierten Objekten und entfernt diese gegebenenfalls aus dem Speicher. Die letzte und vierte Phase ist für die Kompaktifizierung und Defragmentierung des Heap zuständig. EADS Deutschland GmbH 32 von 75

5 Abbildung 12: Phasen des Mark and Sweep Algorithmus. Quelle: aicas Listing 1: Mark and Sweep 1 for each root v a r i a b l e r 2 mark ( r ) ; 3 sweep ( ) 4 5 void mark ( Object p ) 6 i f (! p. marked ) 7 p. marked = true ; 8 for each Object q referenced by p 9 mark ( q ), void sweep ( ) 12 for each Object p in the heap 13 i f ( p. marked ) 14 p. marked = f a l s e ; 15 else 16 heap. r e l e a s e ( p ) ; EADS Deutschland GmbH 33 von 75

6 3.2 Java-Echtzeitspezifikationen Im Juni 1998 fand sich unter der Führung von NIST (National Institute for Standards and Technology) eine Gruppe zusammen, die Anforderungen für ein echtzeitfähiges Java erarbeitete. Insgesamt waren daran 37 Firmen beteiligt. Aus diesen Firmen bildeten sich zwei Gruppen, eine die unter dem Sun Java Community Process (JCP) arbeitet und das J-Consortium, ein Zusammenschluss von Herstellern, die von Sun unabhängig bleiben wollten. Die Ziele dieser Anforderungen sind: Echtzeit-Java soll als oberste Priorität deterministisches Antwortverhalten garantieren. Echtzeit-Java soll abwärtskompatibel sein. Nicht echtzeitfähige Javaprogramme sollen uneingeschränkt auch unter RTSJ-Implementationen ausführbar sein. Echtzeit-Java soll portabel und plattformunabhängig sein. Die Portabilität und die Plattformunabhängigkeit muss gewährleistet werden. Echtzeit-Java soll keine syntaktischen Spracherweiterungen haben. Das Ergebnis sind drei Vorschläge für ein echtzeitfähiges Java (engl. Realtime Java): Ein Vorschlag von Sun, die Real-Time Specification for Java [BHK2000] und zwei Vorschläge des J-Consortiums, die Real- Time Core [RTSJ1999] Extensions for the Java Platform und der Real-Time Data Access [RTCE1999]. Die Firma aicas implementierte die RTSJ in ihre echtzeitfähige virtuellen Maschine. Da diese in dieser Arbeit verwendet wird, wird im folgenden der Vorschlag von Sun, die RTSJ genauer vorgestellt. Es werden nicht alle Details dieser Spezifikation behandelt, sondern eine sinnvolle Auswahl getroffen, die das Gesamtkonzept wiedergeben The Real-Time-Specification for Java Die Real-Time-Specification for Java erweitert die Java-Spezifikation in sechs Bereichen, die nachfolgend eingeführt werden [RTSJ1999]. Eine genauere Beschreibung der einzelnen Bereiche sowie eine Einführung zur Programmierung mit der RTSJ befinden sich in [Dib2002]. Nach dieser Einführung wird in Kapitel 3.3 die JamaicaVM vorgestellt. Threads und Scheduling: Die RTSJ definiert Realtime-Threads, also Threads die den vorgegebenen zeitlichen Restriktionen hinreichend genau genügen müssen. Dabei ist das Scheduling von zentraler Bedeutung. Die RTSJ definiert fogende Schedulingstrategien: Priority Scheduling, Periodic Scheduling sowie Deadline Scheduling. Beim Priority Scheduling wird jedem Rechenprozess eine Prioritätsebene zugeordnet. Prozesse mit höherer Priorität werden zuerst abgearbeitet. Siehe Kapitel Speicherverwaltung und Garbage Collection: Die RTSJ definiert zwei neue Speicherbereiche für No- Heap-Threads, die nicht vom GC beinträchtigt werden: immortal memory und scoped memory. Siehe Kapitel Asynchrones Eventhandling: Echtzeitanwendungen sind ereignisgesteuert. Die RTSJ definiert happenings als eine Verbindung zwischen extern auftretenden Ereignissen und asynchronen Event Handlers. Siehe Kapitel Asynchroner Kontrollfluss: Asynchronous transfer of control (ATC) ist ein Mechaninsmus, welcher einem Thread erlaubt eine Exception in einen anderen Thread zu werfen. Siehe Kapitel [Dib2002]. Physikalischer Speicherzugriff Die RTSJ unterstüzt mit Load and Store Operationen den direkten Zugriff auf Speicheradressen. Siehe Kapitel EADS Deutschland GmbH 34 von 75

7 Threads und Scheduling Um den Echtzeitanforderungen in Realtime-Environments (RTE) gerecht zu werden, definiert die RTSJ RealtimeThread und NoHeapRealtimeThread Objekte. Diese Threads können mit 28 Prioritätslevels belegt werden. Diese liegen dabei alle über den 10 Prioritätslevels eines java.lang.thread Objektes. Abbildung 13 zeigt, daß RealtimeThreads nicht von den Unterbrechungen des Garbage Collectors betroffen sind. Im Folgenden werden die Eigenschaften von RealtimeThread und deren Anwendung in Code-Beispielen gezeigt. Abbildung 13: RealTimeThreads in der RTSJ sind nicht von Unterbrechungen des GC betroffen. Quelle: aicas RealtimeThread Diese Threadklasse kann ausschließlich auf dem Heap allokierte Objekte ansprechen. Die Klasse javax.realtime.realtimethread ist von java.lang.thread abgeleitet. Somit erbt der ReatimeThread alle Eigenschaften und Operationen eines java.lang.thread Objektes. Listing 2 erzeugt und startet einen RealtimeThread. Listing 2: Erzeugen eines RealtimeThread durch einen java.lang.thread 1 import javax. r e a l t i m e. ; 2 3 public c l a s s HelloRTJava { 4 public s t a t i c void main ( S t r i n g [ ] args ){ 5 RealtimeThread r t = new RealtimeThread ( ) ; 6 public void run ( ) { 7 System. out. p r i n t l n ( Hello RTJava ) ; 8 } ; 9 r t. s t a r t ( ) ; 10 } 11 } Der Aufruf des unparameteriesierten Konstruktors der Klasse RealtimeThread, aus einem java.lang.thread, startet einen Thread mit den in Tabelle gezeigten Werten. EADS Deutschland GmbH 35 von 75

8 Field memory area memory parameters processinggroupparameters releaseparameters scheduler schedulingparameters Default Der Thread wird im Heap gestartet. Der Thread ist keinen Speicherrestriktionen unterzogen. Der Thread gehört keiner Gruppe an. Der Thread unterliegt keiner Zeitrestriktion. Der Thread wird durch den Standardscheduler dem Betriebsmittel zugeteilt. Der Thread startet mit NORM PRIORITY. Soll der zu erzeugende Thread nicht mit den in Tabelle gelisteten Werten erzeugt werden, so muss dieser parametrisiert aufgerufen werden. Der Konstruktor eines RealtimeThreads besitzt sechs Parameter, die im folgenden genauer Beschrieben werden. Listing 3: Konstruktor für einen RealtimeThread. 1 public RealtimeThread ( 2 SchedulingParameters scheduling, 3 ReleaseParameters r e l e a s e, 4 MemoryParameters memory, 5 MemoryArea area, 6 ProcessingGroupParameters group, 7 java. lang. Runnable l o g i c ) ; Scheduling Parameter: Die Laufzeitpriorität eines Thread wird durch den Scheduling Parameter festgelegt. Dabei gilt PriorityScheduler.MIN P riority 11 (16) somit liegt die Priorität eines RealtimeThread über den 10 Prioritätslevels eines java.lang.thread Objektes. Release Parameter: Das Zeitverhalten eines RealtimeThread Objektes wird durch den Release Prameter spezifiziert, dieser definiert die T Startzeit, T Periode, T deadline, T maxaus f uehrungszeit, sowie einen Over- RunHandler und einen MissHandler. Memory Parameter: Das Speicherfenster welches von einem RealtimeThread addressiert werden kann, wird durch den Memory Parameter spezifiziert, er definiert eine max. Speicherbereich im HeapMemory, ImmortelMemory oder im ScopedMemory. Memory Area: Der Speicherbereich in dem ein RealtimeThread instanziert werden kann, wird durch den MemoryArea Parameter spezifiziert. MemoryArea area = HeapMemory.instance(); Processing Group: RealtimeThreads können in ProcessingGroups verwaltet werden. Wie auch der Release Parameter, besteht die ProcessingGroup aus T Startzeit, T Periode, T deadline, T maxaus f uehrungszeit, sowie einen OverRunHandler und einen MissHandler. Bei der Zuordnung eines RealtimeThread Objektes zu einer ProcessingGroup übernimmt das Thread Objekt die Eigenschaften der ProcessingGroup. Logic: Referenz auf ein Objekt, dass das Interface Runnable implementiert. Runnable logic = new MyThread(); Listing 4 zeigt wie ein RealtimeThread parametrisiert und gestartet wird. EADS Deutschland GmbH 36 von 75

9 Listing 4: Erzeugen und starten eines parametrisierten RealtimeThread Objektes 1 import javax. r e a l t i m e. ; 2 3 public c l a s s FullConstructor { 4 public s t a t i c void main ( S t r i n g [ ] args ){ 5 SchedulingParameters scheduling = 6 new P r i o r i t y P a r a m e t e r s ( P r i o r i t y S c h e d u l e r. MIN Priority ) ; 7 ReleaseParameters r e l e a s e = 8 new AperdicParameters ( null, null, null, null ) ; 9 MemoryParameters memory = 10 new MemoryParameters ( MemoryParameters.NO MAX, 0 ) ; 11 MemoryArea area = HeapMemory. i n s t a n c e ( ) ; 12 ProessingGroupParameters group = null ; 13 Runnable l o g i c = new MyThread ( ) ; 14 RealtimeThread r t = 15 new RealtimeThread ( scheduling, r e l e a s e, memory, area, group, l o g i c ) ; 16 r t. s t a r t ( ) ; 17 t r y { 18 r t. j o i n ( ) ; 19 } 20 catch ( Exception e ){} 21 } 22 } 23 } EADS Deutschland GmbH 37 von 75

10 Speicherverwaltung und Garbage Collection Die Standard JavaVM-Spezifikation sieht keinen Garbage Collector vor, fordert dagegen aber eine Möglichkeit dynamisch Speicher zu allokieren, ohne einen Mechanismus bereitzustellen, der den allokierten Speicher wieder frei gibt. Die RTSJ folgt diesem Ansatz und führt zu dem bereits existierenden HeapMemory zusätzlich zwei neue Speicherbereiche ein, die nicht vom GC beinträchtigt werden. Die zwei neuen Speicherbereiche heissen ImmortalMemory und ScopedMemory HeapMemory: Auf einer Heapinstanz operiert ein GC-Thread, der die höchste Priorität besitzt. Dies impliziert, dass der GC jeden Thread der auf dem Heap arbeitet, unterbrechen kann, was wiederum in harten Echtzeitumgebungen nicht toleriert wird. Die Non-Heap Memory Klassen der RTSJ geben dem Programmierer Freiheitsgrade, die es ermöglichen, die Verzögerungen des GC zu umgehen. Um dies zu erreichen dürfen Objekte nicht auf dem Heap, sondern müssen auf dem Immortal- oder ScopedMemory allokiert werden. ImmortalMemory: Der ImmortalMemory besitzt keine Speicherverwaltung. Diese Instanz wird nicht vom GC beinträchtigt. Diese MemoryArea kann während der gesamten Laufzeit von allen aktiven Objekten der Anwendung referenziert werden. Objekte die im ImmortalMemory erzeugt werden, bleiben bis zum Ende der Anwendung im Speicher - sie sind unsterblich. Listing 5: Erzeugen eines Objektes im ImmortalMemory 1 2 ImmortalMemory. i n s t a n c e ( ). enter ( 3 new Runnable ( ) { 4 public void run ( ) { 5 / / in t h i s s c o p e immortal i s t h e d e f a u l t f o r 6 / / memory a l l o c a t i o n 7 o = new Object ( ) ; / / This O b j e c t i s immortal 8 } 9 } 10 } ; EADS Deutschland GmbH 38 von 75

11 ScopedMemory: Diese Speicherinstanz hat eine begrenzte Lebenszeit. Objekte die im Adressraum dieses Speichertyps existieren, können nicht deallokiert werden. Ein Objekt von ScopedMemory und somit alle in ihm gespeicherte Objekte existieren so lange, wie noch mindestens ein Thread den ScopedMemory referenziert. ScopedMemory wird in LTMemory (engl. linear time memory) und VT- Memory (engl. variable time memory) unterteilt. LTMemory garantiert eine lineare Abhänigkeit der Zeit bei der Zuteilung eines Objektes zu einem Speicherberich. Die Abhänigkeit bezieht sich dabei auf die Grösse des Adressbereiches. VTMemory unterliegt nicht den Restriktion der linearen Abhänigkeit von Zeit zur Objektgrösse. Bei der Zuweisung darf hier beliebige, wenn auch nicht unendliche Zeit vergehen. Die Verwendung von VTMemory ist aus den oben genannten Gründen abzuraten. Listing 6: Erzeugen eines Objektes im ScopedMemory 1 2 / / c r e a t e s a 16 k i l o b y t e s memory a r e a o b j e c t named mem 3 LTMemory mem = new LTMeory ( , ) ; mem. e n t e r ( new 4 Runnable ( ) { 5 public void run ( ) { 6 o = new Object ( ) ; / / This O b j e c t w i l l be a l l o c a t e d in 7 / / ScopedMemory 8 } 9 } ) ; EADS Deutschland GmbH 39 von 75

12 Asynchrones Eventhandling In einem RTS treten unabhängige Ereignisse oft asynchron zum regulären Programmablauf auf. Mögliche Ereignisse sind: die maximale Temperatur eines Systems ist erreicht, ein Thread verfehlt seine Deadline. Die Echtzeitsoftware muss auf diese Ereignisse (extern als auch intern) rechtzeitig reagieren, ohne die Zeitrestriktionen der laufenden Threads zu überschreiten. Zu diesem Zweck führt die RTSJ sogenannte schedulable objects ein. Der AsyncEventHandler (AEH) als auch die RealtimeThreads implementieren das Interface Schedulable und können somit dem Scheduler parametrisiert zur Ausführung übergeben werden. Ein AEH kann einem AsyncEvent (AE) mit event.addhandler(handler) übergeben werden. Die Assoziation zwischen Systeminterrupt und einem AsyncEvent wird mit event.bindto( signalname ) realisiert. Der Signalname ist plattformabhängig. Listing 7 erzeugt einen AsyncEventHandler und zeigt dessen Anwendung. Listing 7: Beispielanwendung eines AEH 1 import javax. r e a l t i m e. ; 2 3 public c l a s s SigEvt extends RealtimeThread { 4 public void run ( ) { 5 MemoryArea immortal = ImmortalMemory. i n s t a n c e ( ) ; 6 AsyncEventHandler handler = null ; 7 AsyncEvent event = null ; 8 t r y { handler = ( AsyncEventHandler ) immortal. newinstance ( SigHandler. c l a s s ) ; 9 event = ( AsyncEvent ) immortal. newinstance ( AsyncEvent. c l a s s ) ; 10 } 11 catch ( I n s t a n t i a t i o n E x c e p t i o n e ){ 12 e. p r i n t S t a c k T r a c e ( ) ; 13 } 14 catch ( I l l e g a l A c c e s s E x c e p t i o n e ){ 15 e. p r i n t S t a c k T r a c e ( ) ; 16 } 17 event. addhandler ( handler ) ; 18 event. bindto ( 2 5 ) ; / / Signalnumber event. f i r e ( ) ; event. f i r e ( ) ; event. f i r e ( ) ; 20 t r y { Thread. sleep ( ) ; / / L e t t h e AEH run 21 } 22 catch ( Exception e ){} 23 event. removehandler ( handler ) ; 24 System. e x i t ( 0 ) ; 25 } public s t a t i c void main ( S t r i n g [ ] args ){ 28 sigevent r t = new SigEvent ( ) ; 29 r t. s t a r t ( ) ; 30 t r y { 31 r t. j o i n ( ) ; 32 } catch ( InterruptedException e ){} 33 System. e x i t ( 0 ) ; 34 } 35 } EADS Deutschland GmbH 40 von 75

13 Physikalischer Speicherzugriff Durch die Klassen RawMemoryAccess und RawMemoryFloatAccess wurde in der RTSJ die Möglichkeit geschaffen Speicheradressen mittels Zeiger zu referenzieren. Dies ermöglicht eine effiziente Art direkten Zugriffs auf die Memory Mapped Hardware zu erlangen. Ein Objekt der Klasse RawMemoryAccess ist an einen Speicherbereich gebunden, welcher dem Konstruktor übergeben wird. RawMemoryAccess( java.lang.object type, long size ); type: Der Parameter type klassifiziert die Hardware, welche auf einen Speicherbereich gemapped werden soll, er definiert desweiteren die Art des Zugriffes der VM. Die Menge der unterstützten Hardwaretypen ist Plattformabhängig. size: Definiert die zu reservierende Speichergrösse. Listing 8: Speicherzugriff 1 2 S t r i n g [ ] type = new S t r i n g [ 4 ] ; 3 type [ 0 ] = new S t r i n g ( device ) ; 4 type [ 1 ] = new S t r i n g ( e t h e r n e t ) ; 5 type [ 2 ] = new S t r i n g ( I n t e l ) ; 6 type [ 3 ] = new S t r i n g ( no cache ) ; 7 8 RawMemoryAccess edvc = new RawMemoryAccess ( type, ) ; Ein Nachteil der RTSJ ist, dass eine Anwendung strikt in einen Echtzeit- und in einen Nicht-Echtzeit- Anteil aufgeteilt werden muss. Eine Kommunikation zwischen den beiden Teilen ist nur stark eingeschränkt möglich. Echtzeit-Threads können keine Speicheranweisungen durchführen, wie etwa die Allokation auf dem Heap. EADS Deutschland GmbH 41 von 75

14 3.3 Echtzeitimplementierungen Durch den Einsatz einer EchtzeitVM wird Java in die Domäne der echtzeitkritischen Anwendungen transportiert. Eine für diese Ausarbeitung durchgeführete Marktanalyse zeigt, dass es zum derzeitigen Stand der Diplomarbeit zwei konkurrierende Hersteller von Java-Echtzeitlösungen gibt. Die Firma aicas mit der echtzeitfähigen Jamaica Virtual Machine (JamaicaVM) und die Firma Aonix mit echtzeitfähigen PERC Virtual Machine. Ein von EADS Deutschland GmbH durchgeführter Performancevergleich zwischen JamaicaVM und PERC [BEN2003] belegt, dass die JamaicaVM die performantere Lösung ist. Aus diesem Grund wird in dieser Ausarbeitung die JamaicaVM verwendet und im Folgenden vorgestellt JamaicaVM Die Jamaica Virtual Machine ist eine echtzeitfähige Java-Implementierung nach der RTSJ [RTSJ1999] mit folgenden Eigenschaften [AIC2004]. Harte Echtzeitausführung Die JamaicaVM garantiert harte Echtzeit für alle Java-Operationen. Realtime Garbage Collection: Die JamaicaVM besitzt einen deterministischen, inkrementellen Garbage Collector. Dieser GC arbeitet nach dem Mark and Sweep Algorithmus und gewährleistet, dass keine Anwendungsthreads zu unvorhersehbaren Zeitpunkten durch den GC unterbrochen werden. Die Separierung der Anwendung, in Echtzeit- und Nicht-Echtzeitthreads entfällt - alle Threads sind Echtzeitthreads. Eine strikte Einteilung einer Anwendung in zwei Teile ist damit nicht mehr erforderlich. Threads werden nach ihrer Priorität bzw. anderen Schedulingstrategien eingeplant und zugeteilt. Der inkrementeller Garbage Collector arbeitet deterministisch innerhalb der Anwendungsthreads bei der Zuweisung von Speicher. Der Garbage Collector ist dabei immer unterbrechbar, sodass andere Threads aktiv werden können, und dringendere Aufgaben erledigen können. Abbildung 14: Echtzeit Garbage Collection: Alle Threads sind Echtzeitthreads. Quelle: aicas ROM-fähiger Code: Klassendateien und die JamaicaVM selbst können in eine Binärdatei gebunden werden, die direkt aus ROM/Flash Speicher ausführbar ist. Es wird kein Dateisystem benötigt um Java-Code auszuführen. Bibliotheken und Native Code: Existierende Bibliotheken oder performancekritischer low-level Code für Hardwarezugriffe können über das Java Native Interface in den echtzeitfähigen Code eingebunden werden. Portierbar auf unterschiedliche RTOS: Unterstützt werden derzeit: VxWorks, QNX und Linux-Varianten Klassendateien und die JamaicaVM selbst können in eine Binärdatei gebunden werden, die direkt aus ROM/Flash Speicher ausführbar ist. Dabei wird aus dem Java-Bytecode ein portabler C-Code erstellt. Der C-Code wird mit einem native C-Compiler kompiliert und zusammen mit den JamaicaVM-Dateien EADS Deutschland GmbH 42 von 75

15 zu einer ausführbaren Datei gelinkt. Die Firma aicas integrierte diesen Prozess in den JamaicaVM Builder der in Abbildung 15 dargestellt ist. Abbildung 15: Der JamaicaVM Builder erzeugt aus dem Java-Bytecode eine ausführbare Datei für das Zielsystem. Quelle: aicas PERC Die PERC Virtual-Machine ist eine echtzeitfähige Java-Implementierung nach der Real-Time Core Extensions for the Java platform [RTCE1999]. Die Eigenschaften von PERC sind in [AON2004] beschrieben. EADS Deutschland GmbH 43 von 75

16 4 Performancevergleich: C vs. Java In diesem Teil der Ausarbeitung wird die Ausführungsgeschwindigkeit von Java- und C-Programmen untersucht. Für diesen Vergleich werden jeweils drei Testprogramme (engl. Benchmark) auf einem Win2k und einem VxWorks5.5 System ausgeführt, deren Ausführungsgeschwindigkeit gemessen und interpretiert. Diese Benchmarks werden in Kapitel 4.1 beschrieben. Kapitel 4.3 interpretiert die Testergebnisse auf den verwendeten Plattformen. Kapitel 4.4 zeigt die verwendeten Compiler-Optionen. Der Quellcode der einzelenen Benchmarks befindet sich in Anhang A im Verzeichnis./benchmark/ 4.1 Verwendete Benchmarks Es wurden drei Benchmarks verwendet, um die Ausführungsgeschwindigkeit zu bestimmen. Verwendet wurde: SciMark2.0 SciMark2.0 [SciMark2.0] ist ein Benchmark für numerische Lösungsverfahren und misst die Performance mathematischer Algorithmen. Dieser Benchmark besteht aus folgenden fünf Algorithmen: Fast Fourier Transformation (FFT) ist die Umwandlung einer Zeitfunktion oder Folge in ein Spektrum. Jacobi Successive Over-Relaxation (SOR) ist ein Verfahren zur Lösung eines linearen Gleichungssystems. Monte Carlo integration ist ein Verfahren zur Berechnung von π. Sparse matrix multiply ist die Multiplikation dünn besetzter Matritzen. dense LU matrix factorization ist die Zerlegung einer quadratischen Matrix A in ein Produkt A = L U. Dabei ist L eine untere Dreiecksmatrix mit Einsen auf der Diagonale und U eine obere Dreiecksmatrix. Dieser Benchmark testet die Floating Point Performance auf der untersuchten Plattform Loops Loops [c t Ausg.19] ist ein Benchmark, der die Schleifenperfomance in ms misst. Loops besteht aus drei Schleifen, die jeweils dreifach verschachtelt sind. Dabei führt eine Schleife (Empty Loop) keinen Code aus, die zweite (Calc Loop) inkrementiert einen Zähler und die dritte Schleife (Real Calc Loop) führt eine Berechnung durch. Loops misst die Schleifen-Perfomance auf der untersuchten Plattform RSA-Angriff RSA-Angriff [c t Ausg.19] zerlegt eine 64-Bit Zahl in Faktorenpaare. Der Code des in zwei Varianten aufrufbaren Programms kann als Brute-Force Schleife und als rekursiver Algorithmuns aufgerufen werden. Dieser Benchmark testet die Integer-Performance auf der untersuchten Plattform. EADS Deutschland GmbH 44 von 75

17 4.2 Verwendete Plattformen Die in Kapitel 4.1 verwendeten Benchmarks wurden auf fogenden Systemen getestet: Win2k Microsoft Windows 2000 System mit der Version und installierten Service Pack 2. Das Testsystem besitzt MB RAM. Die CPU ist ein Intel Pentium 4 mit einer Taktfrequenz von 1.7 GHz VxWorks5.5 Windriver VxWorks5.5 System. Das TestSystem besitzt 256 MB RAM. Die CPU ist ein PPC 7410 mit einer Taktfrequenz von 500 MHz. Abbildung 16 zeigt eine Übersicht über die durchgeführten Testkonstulationen für jeweils einen Benchmark. Für jeden Benchmark wurden sieben Tests durchgeführt, fünf auf Plattform und zwei auf Plattform C Anwendung Java Anwendung C Anwendung Java Anwendung C/gcc C/Jamaica C/gcc C/MSVC Jamaica VM C/Jamaica Sun VM MinGW PThread VxWorks Win2k PPC Pentium Abbildung 16: SciMark2 auf Win2k. EADS Deutschland GmbH 45 von 75

18 4.3 Interpretation der Testergebnisse Laufzeitüberprüfungen haben einen signifikanten Einfluss auf die Ausführungsgeschwindigkeit. C führt keine Überprüfungen während der Laufzeit durch. Um Java und C miteinander vergleichen zu können, wurde für die kompilierte Version mit Jamaica 2.3 beta die Laufzeitüberprüfung deaktiviert. Um einen Vergleich zu unterschiedlichen C-Compilern aufzeigen zu können, wurde jeder Benchmark sowohl mit dem gcc 2.96 als auch mit dem Microsoft VC6.0 kompiliert. Für die Testergebnisse von Sun wurde der Interpreter mit der Version verwendet. Der Bytecode der kompilierten Java-Benchmarks, wurde durch den JamaicaVM Builder in C-Dateien transformiert und anschließend mit dem gcc 2.96 kompiliert SciMark2.0 Abbildung 17 und 18 zeigen die Ergebnisse des SciMark2.0 [SciMark2.0] Benchmarks. Auf der Y-Achse ist jeweils die Ausführungsgeschwindigkeit in Million floating point operations per second (Mflops) angegeben. Auf der X-Achse sind die einzelnen Algorithmen des SciMark2.0 aufgetragen. Jeder Benchmark ist in der Abbildung durchnummeriert, um einen direkten Bezug auf den entsprechenden Test nehmen zu können. SciMark2.0 auf Win2k Abbildung 17 zeigt die Testergebnisse des SciMark2.0 [SciMark2.0] auf Plattform Test 1 und 2 wurden interpretiert ausgeführt. Test 3,4 und 5 wurden kompilert. Der Vergleich von Test 1 und 2 zeigt, dass die Interpretation durch die JamaicaVM signifikant schlechtere Ergebnisse liefert als die Interpretation durch die VM von Sun. Der Grund liegt darin, dass Sun einen JIT-Compiler benutzt und somit den Bytecode nicht mehr zu 100 Prozent interpretiert ausführt. Test 3,4 und 5 wurden vollständig kompiliert. Die Ergebnisse zeigen ein ausgewogenes relatives Verhältnis der einzelnen Algorithmen zueinander. Überraschend ist, dass die FFT mit Jamaica im direkten Geschwindigkeitsvergleich schneller ausgeführt werden konnte, als das korrespondierende C-Programm, welches mit dem gcc übersetzt wurde. EADS Deutschland GmbH 46 von 75

19 Ausführungsgeschwindigkeit [Mflops] Benchmark: SciMark2 auf Win2k FFT SOR Monte Carlo Sparse mult. LU Sun Jamaica Jamaica, gcc C, Microsoft C, gcc Abbildung 17: SciMark2 auf Win2k. EADS Deutschland GmbH 47 von 75

Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten

Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten Martin Däumler Matthias Werner Lehrstuhl Betriebssysteme Fakultät für Informatik

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

Echtzeitfähige Ereignisgetriebene Scheduling-Strategien

Echtzeitfähige Ereignisgetriebene Scheduling-Strategien Friedrich-Alexander-Universität Erlangen-Nürnberg Ausgewählte Kapitel eingebetteter Systeme Echtzeitfähige Ereignisgetriebene Scheduling-Strategien Sven Kerschbaum 1. Einführung Bei einem eingebetteten

Mehr

Prozesse und Scheduling

Prozesse und Scheduling Betriebssysteme für Wirtschaftsinformatiker SS04 KLAUSUR Vorbereitung mit Lösungen / Blatt 1 Prozesse und Scheduling Aufgabe 1 : Scheduling Gegeben seien die folgenden Prozesse und die Längen des jeweiligen

Mehr

5. Threads, Serverprozesse und Benachrichtigungen

5. Threads, Serverprozesse und Benachrichtigungen 5. Threads, Serverprozesse und Benachrichtigungen Threads allgemein Threads in Android: Handler und Messages Services: Local, Remote, Binding Benachrichtigungen Entwicklung mobiler Anwendungen Europäische

Mehr

Embedded-Linux-Seminare. Linux als Betriebssystem

Embedded-Linux-Seminare. Linux als Betriebssystem Embedded-Linux-Seminare Linux als Betriebssystem http://www.embedded-linux-seminare.de Diplom-Physiker Peter Börner Spandauer Weg 4 37085 Göttingen Tel.: 0551-7703465 Mail: info@embedded-linux-seminare.de

Mehr

Grundlagen zur nebenläufigen Programmierung in Java

Grundlagen zur nebenläufigen Programmierung in Java Grundlagen zur nebenläufigen Programmierung in Java Karlsruher Entwicklertag 2013 5. Juni 2013 Referent: Christian Kumpe Inhalt des Vortrags Was zeigt dieser Vortrag? Ein einfaches Beispiel mit allerlei

Mehr

Institut für Verteilte Systeme

Institut für Verteilte Systeme Institut für Verteilte Systeme Prof. Dr. Franz Hauck Seminar: Multimedia- und Internetsysteme, Wintersemester 2010/11 Betreuer: Jörg Domaschka Bericht zur Seminarssitzung am 2011-01-31 Bearbeitet von :

Mehr

POSIX Echtzeit: Kernel 2.6 und Preempt-RT

POSIX Echtzeit: Kernel 2.6 und Preempt-RT POSIX Echtzeit: Kernel 2.6 und Preempt-RT Slide 1 - http://www.pengutronix.de - 21.01.2007 Echtzeit-Systemplanung Wenn das zeitliche Verhalten spezifiziert ist, kann auch spezifiziert werden, welche Applikationsteile

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

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick Vorlesung Objektorientierte Softwareentwicklung Sommersemester este 2008 Kapitel 0. Java-Überblick Was sind die Ziele? Warum Java? Komplexe Anwendungen e-business verteilt zuverlässig sicher mobil persistent

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

Rechnernutzung in der Physik. Betriebssysteme

Rechnernutzung in der Physik. Betriebssysteme Rechnernutzung in der Physik Betriebssysteme 1 Betriebssysteme Anwendungsprogramme Betriebssystem Treiber BIOS Direkter Zugriff von Anwenderprogrammen auf Hardware nur in Ausnahmefällen sinnvoll / möglich:

Mehr

Implementierung der Jikes Research Virtual Machine

Implementierung der Jikes Research Virtual Machine Fakultät Informatik Institut für technische Informatik, Professur für VLSI-Entwurfssysteme, Diagnostik und Architektur Implementierung der Jikes Research Virtual Machine Hauptseminar Technische Informatik

Mehr

RTEMS- Echtzeitbetriebssystem

RTEMS- Echtzeitbetriebssystem RTEMS- Echtzeitbetriebssystem Name: Hussein Hammoud Matrikel- Nr.: 230768 Studiengang: Technische Informatik Fach: Projekt Eingebettete Kommunikation Technische Universität Berlin Sommersemester 2006 RTEMS-

Mehr

1. Java Grundbegriffe

1. Java Grundbegriffe 1. Java Grundbegriffe Geschichte von Java Programmieren mit Java Interpretieren vs. Kompilieren Java Byte-Code Jave Virtual Machine Arbeitsmaterialien Allgemeine Informatik 2 SS09 Folie 1.1 Java, eine

Mehr

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage C# CLR CIL MCS ECMA-335 Linux.Ne t Was ist.net? Microsoft Homepage:.NET is the Microsoft Web services strategy to connect information, people, systems and devices through software. Mono Handbuch:.Net besteht

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

Effiziente Java Programmierung

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

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

Grundlagen der Informatik Ausnahmebehandlung & Threads

Grundlagen der Informatik Ausnahmebehandlung & Threads Grundlagen der Informatik Ausnahmebehandlung & Threads Prof. Dr. Bernhard Schiefer (basierend auf Unterlagen von Prof. Dr. Duque-Antón) bernhard.schiefer@fh-kl.de http://www.fh-kl.de/~schiefer Inhalt Ausnahmebehandlung

Mehr

Von der UML nach C++

Von der UML nach C++ 22 Von der UML nach C++ Dieses Kapitel behandelt die folgenden Themen: Vererbung Interfaces Assoziationen Multiplizität Aggregation Komposition Die Unified Modeling Language (UML) ist eine weit verbreitete

Mehr

Programmierung. Programme, Compiler, virtuelle Maschinen, Java

Programmierung. Programme, Compiler, virtuelle Maschinen, Java Programmierung Programme, Compiler, virtuelle Maschinen, Java Programme Ein Programm ist eine Folge von Anweisungen, die einem Computer sagen, was er tun soll tuwas.c for(int i=0; i=0; i

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

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

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

Mehr

White Paper. Embedded Treiberframework. Einführung

White Paper. Embedded Treiberframework. Einführung Embedded Treiberframework Einführung White Paper Dieses White Paper beschreibt die Architektur einer Laufzeitumgebung für Gerätetreiber im embedded Umfeld. Dieses Treiberframework ist dabei auf jede embedded

Mehr

Dämon-Prozesse ( deamon )

Dämon-Prozesse ( deamon ) Prozesse unter UNIX - Prozessarten Interaktive Prozesse Shell-Prozesse arbeiten mit stdin ( Tastatur ) und stdout ( Bildschirm ) Dämon-Prozesse ( deamon ) arbeiten im Hintergrund ohne stdin und stdout

Mehr

Die Integration zukünftiger In-Car Multimedia Systeme unter Verwendung von Virtualisierung und Multi-Core Plattformen

Die Integration zukünftiger In-Car Multimedia Systeme unter Verwendung von Virtualisierung und Multi-Core Plattformen Die Integration zukünftiger In-Car Multimedia Systeme unter Verwendung von Virtualisierung und Multi-Core Plattformen 0. November 0 Sergio Vergata, Andreas Knirsch, Joachim Wietzke Echtzeit 0 Agenda Motivation

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

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

Die L4-Mikrokern. Mikrokern-Familie. Hauptseminar Ansätze für Betriebssysteme der Zukunft. Michael Steil. Michael Steil 18.04.2002

Die L4-Mikrokern. Mikrokern-Familie. Hauptseminar Ansätze für Betriebssysteme der Zukunft. Michael Steil. Michael Steil 18.04.2002 Die L4-Mikrokern Mikrokern-Familie Hauptseminar Ansätze für Betriebssysteme der Zukunft 18.04.2002 Folie 1 Aufbau des Vortrags 1. Mikrokerne: Idee und Geschichte 2. L4: ein schneller Mikrokern 3. L4Linux:

Mehr

Variablen manipulieren per JDI

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

Mehr

Verteilte Echtzeit-Systeme

Verteilte Echtzeit-Systeme Seminar im SS06 Verteilte Echtzeit-Systeme Prof. Sergei Gorlatch Dipl.-Inf. Jens Müller jmueller@uni-muenster.de Einsteinstr. 62, Raum 705, Tel. 83-32746 Westfälische Wilhelms-Universität Münster Fachbereich

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

Redwood Cronacle und REALTECH theguard! Integration

Redwood Cronacle und REALTECH theguard! Integration Redwood Cronacle und REALTECH theguard! Integration Einleitung Redwood Software und REALTECH haben gemeinsam eine Lösung entwickelt, die die Systemverfügbarkeit von SAP und mysap Systemen signifikant erhöht.

Mehr

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011. Timer. Sockets.

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011. Timer. Sockets. Programmieren II Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 / 26 Timer Sockets SMTP-Client 2 / 26 Timer Mit einem Timer können bestimmte Aktionen periodisch wiederkehrend durchgeführt

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

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

Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008

Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008 Name: Matrikel-Nr: Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008 Bitte schreiben Sie leserlich und antworten Sie kurz und präzise. 1. Zeichnen Sie das Schichten-Modell eines Computersystems und markieren

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Embedded OS für ARM Cortex Microcontroller

Embedded OS für ARM Cortex Microcontroller Embedded OS für ARM Cortex Microcontroller RTOS Design, Timinganalyse und Test mit Core Simulation und Hardware Debugger Entscheidende Fragen für oder gegen RTOS Lohnt sich der Einsatz eines RTOS auch

Mehr

Einführung in COM. 04.04.2006 Seite 1

Einführung in COM. 04.04.2006 Seite 1 Einführung in COM 04.04.2006 Seite 1 Ziele Sie kennen die Funktion der Registry für COM Sie können die Struktur eines COM-Objekts erklären Sie können erklären, wie ein remote-server gestartet wird 04.04.2006

Mehr

Dipl.-Inf. J. Richling Wintersemester 2003/2004. Weiche Echtzeit

Dipl.-Inf. J. Richling Wintersemester 2003/2004. Weiche Echtzeit Dipl.-Inf. J. Richling Wintersemester 2003/2004 Weiche Echtzeit Wiederholung - Resultat/Wert-Funktion "harte" Echtzeit Wert Zeit Wert Zeit Wert Deadline Zeit "weiche" Echtzeit Wert Deadline Zeit Deadline

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

Sowohl RTX64 als auch RTX bieten harten Echtzeitdeterminismus und symmetrische Multiprocessing- Fähigkeiten (SMP).

Sowohl RTX64 als auch RTX bieten harten Echtzeitdeterminismus und symmetrische Multiprocessing- Fähigkeiten (SMP). Produktbeschreibung Februar 2014 RTX RTOS-Plattform Mit der RTX-Echtzeitsoftware von IntervalZero wird aus Microsoft Windows ein Echtzeitbetriebssystem (RTOS). RTX64 von IntervalZero unterstützt 64-Bit-Betriebssysteme

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Java Performance Tuning

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

Mehr

Projekt für Systemprogrammierung WS 06/07

Projekt für Systemprogrammierung WS 06/07 Dienstag 30.01.2007 Projekt für Systemprogrammierung WS 06/07 Von: Hassan Bellamin E-Mail: h_bellamin@web.de Gliederung: 1. Geschichte und Definition 2. Was ist Virtualisierung? 3. Welche Virtualisierungssoftware

Mehr

0. Einführung. C und C++ (CPP)

0. Einführung. C und C++ (CPP) C und C++ (CPP) 0. Einführung Prof. Dr. Marc Rennhard Institut für angewandte Informationstechnologie InIT ZHAW Zürcher Hochschule für Angewandte Wissenschaften marc.rennhard@zhaw.ch Marc Rennhard, 05.01.2010,

Mehr

3. Konzepte der objektorientierten Programmierung

3. Konzepte der objektorientierten Programmierung 3. Konzepte der objektorientierten Programmierung 3.1 Basiskonzepte 3.2 Generalisierung / Spezialisierung 3.3 Aggregation 3.4 Assoziation 3.5 Nachrichten 3.6 Polymorphismus 3. Konzepte der Objektorientierung

Mehr

Echtzeitbetriebssysteme

Echtzeitbetriebssysteme Echtzeitbetriebssysteme QNX 409 Geschichte: Einführung 1980 entwickeln Gordon Bell und Dan Dodge ein eigenes Echtzeitbetriebssystem mit Mikrokernel. QNX orientiert sich nicht an Desktopsystemen und breitet

Mehr

Virtualisierung im Echtzeitbereich. Andreas Hollmann FH Landshut EADS Military Air Systems

Virtualisierung im Echtzeitbereich. Andreas Hollmann FH Landshut EADS Military Air Systems Virtualisierung im Echtzeitbereich Andreas Hollmann FH Landshut EADS Military Air Systems 2 Überblick Hintergrund und Motivation Vorstellung von Lösungsansätzen Auswahl und Evaluierung Einschränkungen

Mehr

Einführung in den NetBeans Profiler

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

Mehr

2 Der Schnelleinstieg *

2 Der Schnelleinstieg * 7 2 Der Schnelleinstieg * Eine Programmiersprache können Sie auf verschiedene Art und Weise lernen. Sie können sich zuerst mit den Konzepten befassen und anschließend mit der Praxis oder umgekehrt. Damit

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Proseminar Technische Informatik A survey of virtualization technologies

Proseminar Technische Informatik A survey of virtualization technologies Proseminar Technische Informatik A survey of virtualization technologies Referent: Martin Weigelt Proseminar Technische Informatik - A survey of virtualization technologies 1 Übersicht 1. Definition 2.

Mehr

Einführung in Betriebssysteme

Einführung in Betriebssysteme Einführung in Betriebssysteme APPLE ios Entwicklung von ios Entwickelt auf der Basis von MacOS X UNIX Vorgestellt am 9.1.2007 Zusammen mit iphone Markenname von Cisco Internetwork Operating System Für

Mehr

Softwarelabor 1. Einführung

Softwarelabor 1. Einführung Softwarelabor 1. Einführung Prof. Dr. holger.vogelsang@fh-karlsruhe.de Inhalt Inhalt 1. Einführung Warum Java? Marktanforderungen Geschichte von Java Eigenschaften von Java Einführung in Eclipse Kleine

Mehr

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik Einleitung, Anwendungsfälle, Programmierung MKT Systemtechnik Autor: Stand: Ablage: Wolfgang Büscher Dipl.-Ing. Soft- und Hardware-Entwicklung buescher@mkt-sys.de 2015-01-21 (JJJJ-MM-DD) art85133_einfuehrung_mktview_scriptsprache.odp/pdf;

Mehr

1. Java ist... 2. Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

1. Java ist... 2. Stammbaum der Programmiersprachen 3. Die Softwarekrise im Überblick im Überblick Inhalt 1. Java ist... 2. Stammbaum der Programmiersprachen 3. Die Softwarekrise 1. Merkmale von Software 2. Fortlaufende Veränderungen 3. Erschwerte Rahmenbedingungen bei der

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Martin Wirsing 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm... Warum Java als Programmiersprache verwenden? Ein einfaches Java-Programm erstellen,

Mehr

Produktqualität. Embedded Software. Prof. Dr. Nikolaus Wulff

Produktqualität. Embedded Software. Prof. Dr. Nikolaus Wulff Produktqualität Nichtfunktionale Anforderungen: Zuverlässigkeit, Funktionale Sicherheit, Echtzeitverhalten und Ressourcenverbrauch, Wart- und Erweiterbarkeit. Prof. Dr. Nikolaus Wulff Embedded Produkt

Mehr

Konzeption eines Backends für eine Liquid-Bedienoberfläche

Konzeption eines Backends für eine Liquid-Bedienoberfläche Konzeption eines Backends für eine Liquid-Bedienoberfläche Gruppe Backend Hochschule für Technik und Wirtschaft Dresden Fakultät Informatik/Mathematik 25. Januar 2012 1 / 27 Gliederung 1 Einleitung 2 AIR

Mehr

C. Betriebssystem-Strukturen C.1 Monolithische Betriebssysteme

C. Betriebssystem-Strukturen C.1 Monolithische Betriebssysteme C. Betriebssystem-Strukturen C.1 Monolithische Betriebssysteme Sammlung von Routinen, ohne Hierarchie, Kapselung und Schichtung. Jede Prozedur kann beliebige andere Prozeduren aufrufen und Datenstrukturen

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume 1 Kapitel 13 Ziele 2 Den Begriff des Baums in der Informatik kennenlernen als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf n verstehen und schreiben können Verschiedene Möglichkeiten

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Applications Applets (eingeschränkte Rechte)

Applications Applets (eingeschränkte Rechte) 1 Arten von Java-Programmen Man unterscheidet 2 verschiedene Arten von Java-Programmen: Applications Applets (eingeschränkte Rechte) Erstere sind eigenständige Programme. Letztere sind "kleine" Programme,

Mehr

Android Processes & Services

Android Processes & Services Android Processes & Services Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Ziele heute Arbeitsblatt 4 besprechen (inkl. Repetition)

Mehr

Erste Schritte zum lauffähigen Java Programm

Erste Schritte zum lauffähigen Java Programm Erste Schritte zum lauffähigen Java Programm Diese kleine Einführung ist eine Hilfe für Studenten der Vorlesung SWT I zur Meisterung der sich ergebenden Hürden bei der Erstellung eines ersten kleinen Java-Programms.

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

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

6. Tutorium zu Softwaretechnik I

6. Tutorium zu Softwaretechnik I 6. Tutorium zu Softwaretechnik I Parallelität und Testen Michael Hoff 01.07.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

2 Echtzeitbetriebssysteme

2 Echtzeitbetriebssysteme 35 2 Echtzeitbetriebssysteme In den letzten Jahren hat sich die Automobilindustrie zu einem der wesentlichen Anwender von Echtzeitbetriebssystemen für eingebettete Systeme entwickelt. Relativ zeitig erkannten

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Systeme 1. Kapitel 5. Scheduling

Systeme 1. Kapitel 5. Scheduling Systeme 1 Kapitel 5 Scheduling Scheduling Verteilung und Zuweisung von begrenzten Ressourcen an konkurrierende Prozesse Beispiel: -> Zeitablaufsteuerung Zwei Prozesse zur gleichen Zeit rechenbereit auf

Mehr

Embedded-Linux-Seminare. Toolchains

Embedded-Linux-Seminare. Toolchains Embedded-Linux-Seminare Toolchains http://www.embedded-linux-seminare.de Diplom-Physiker Peter Börner Spandauer Weg 4 37085 Göttingen Tel.: 0551-7703465 Mail: info@embedded-linux-seminare.de Kopier-Rechte

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 6. Übung http://ess.cs.tu-.de/de/teaching/ws2013/bsb/ Olaf Spinczyk olaf.spinczyk@tu-.de http://ess.cs.tu-.de/~os AG Eingebettete System Informatik 12, TU Dortmund Agenda Vorstellung

Mehr

Java Desktop Anwendungen

Java Desktop Anwendungen 5 1 Java Desktop Anwendungen das Problem: Desktop-Anwendungen werden mit Hilfe der Swing- Bibliothek programmiert, aber die Swing-Bibliothek ist riesig und unübersichtlich es gab kein Programmiergerüst

Mehr

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung Ludwig-Maximilians-Universität München Institut für Informatik Programmierung und Softwaretechnik (PST) Prof. Wirsing 6. Mai 2009 1 Der Name Java

Mehr

Inhaltsverzeichnis. 2.4 Thread-Systeme. 2.1 Was ist ein Prozess? 2.2 Scheduling. 2.3 Interprozesskommunikation

Inhaltsverzeichnis. 2.4 Thread-Systeme. 2.1 Was ist ein Prozess? 2.2 Scheduling. 2.3 Interprozesskommunikation Inhaltsverzeichnis Systemprogrammierung - Kapitel 2 Prozessverwaltung 1/21 2.1 Was ist ein Prozess? Definition Prozesszustände Prozesskontrollblöcke 2.4 Thread-Systeme Sinn und Zweck Thread-Arten Thread-Management

Mehr

Smalltalk. Gespräche über alltägliche, allgemeine und unwichtige Dinge. Smalltalk ist die Kunst zu reden, ohne zu denken.

Smalltalk. Gespräche über alltägliche, allgemeine und unwichtige Dinge. Smalltalk ist die Kunst zu reden, ohne zu denken. Gespräche über alltägliche, allgemeine und unwichtige Dinge. Wikipedia Smalltalk ist die Kunst zu reden, ohne zu denken. Andreas Tenzer, Dozent für Philosophie Inhalt: Vorwort Geschichte Eigenschaften

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

Codesigned Virtual Machines

Codesigned Virtual Machines Codesigned Virtual Machines Seminar Virtualisierung Philipp Kirchhofer philipp.kirchhofer@student.kit.edu Institut für Technische Informatik Lehrstuhl für Rechnerarchitektur Universität Karlsruhe (TH)

Mehr

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08 Rapid I/O Toolkit http://projects.spamt.net/riot Alexander Bernauer alex@copton.net 08.12.08 Inhalt Motivation Architektur Beispiel I/O Features Ausblick Motivation Problemstellung Vorgaben Datenverarbeitung

Mehr

Programmieren was ist das genau?

Programmieren was ist das genau? Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet

Mehr

B.4. B.4 Betriebssysteme. 2002 Prof. Dr. Rainer Manthey Informatik II 1

B.4. B.4 Betriebssysteme. 2002 Prof. Dr. Rainer Manthey Informatik II 1 Betriebssysteme Betriebssysteme 2002 Prof. Dr. Rainer Manthey Informatik II 1 Bekannte Betriebssysteme Windows 2000 CMS UNIX MS-DOS OS/2 VM/SP BS 2000 MVS Windows NT Solaris Linux 2002 Prof. Dr. Rainer

Mehr

Military Air Systems

Military Air Systems Trennung von Applikationen unterschiedlicher Kritikalität in der Luftfahrt durch Software en am Beispiel des Real-time Operating Systems PikeOS Dr. Bert Feldmann DGLR Workshop Garching, 09.10.2007 Seite

Mehr

Das Interceptor Muster

Das Interceptor Muster Das Interceptor Muster Implementierung des Interceptor Musters basierend auf OSGi and Friends Benjamin Friedrich Hochschule für Technik und Wirtschaft des Saarlandes Praktische Informatik - Entwurfsmuster

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe 1 Kapitel 1 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler, Einordnung von Java Ein einfaches Java-Programm erstellen, übersetzen und ausführen Java-Programme dokumentieren 3 Informatik

Mehr

Client/Server-Programmierung

Client/Server-Programmierung lient/server-programmierung WS 2014/2015 etriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, üro: H- 8404 Stand: 15. Oktober 2015 etriebssysteme / verteilte Systeme

Mehr

Programmierkurs Java. Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.

Programmierkurs Java. Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck. Programmierkurs Java Grundlagen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Algorithmen, Maschinen- und Programmiersprachen Algorithmen

Mehr

Übung zu Grundlagen der Betriebssysteme. 7. Übung 27.11.2012

Übung zu Grundlagen der Betriebssysteme. 7. Übung 27.11.2012 Übung zu Grundlagen der Betriebssysteme 7. Übung 27.11.2012 Threads Thread (Faden des (Kontrollflusses)): ist ein sequentieller Abarbeitungsablauf (Kontrollfluss) innerhalb eines Prozesses. Umfasst ein

Mehr

Inhalt. 1. Sprachspezifische Fehlerrisiken C++ Java. Smalltalk. 2. Coverage - Modelle. Statement Coverage. Branch Coverage

Inhalt. 1. Sprachspezifische Fehlerrisiken C++ Java. Smalltalk. 2. Coverage - Modelle. Statement Coverage. Branch Coverage Inhalt 1. Sprachspezifische Fehlerrisiken C++ Java Smalltalk 2. Coverage - Modelle Statement Coverage Branch Coverage Inkrementelles Testen von Klassen Testen Polymorpher Bindungen Optimistischer Ausblick

Mehr

CORBA Implementierung von Client und Server

CORBA Implementierung von Client und Server CORBA Implementierung von Client und Server J. Heinzelreiter WS 2003/04 Implementierung des Clients Initialisierung und Freigabe des ORBs. Mapping von Interfaces. Behandlung von Objektreferenzen. Verwaltung

Mehr

Echtzeitanforderung und Linux

Echtzeitanforderung und Linux Echtzeitanforderung und Linux Slide 1 - http://www.pengutronix.de - 21.01.2007 Definition Harte Echtzeit I Was zeichnet ein Echtzeitsystem aus? Zeitverhalten ist Teil der System-Spezifikation! Bei Embedded-Systemen

Mehr

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

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

Mehr