Schneller mit AspectJ
|
|
|
- Hertha Müller
- vor 7 Jahren
- Abrufe
Transkript
1 November 2007 Performance JUGS Schneller mit AspectJ [email protected]
2 Wir über uns Gründung Vorstand Olaf Ahl & Wolfgang Clauss Standorte Stuttgart (Firmensitz), Kassel, München und Hamburg Aktionäre PIRONET NDH AG, Köln (börsennotiert) agentes Management Kassel Hamburg Mitarbeiter 110 Ergebnis Stuttgart 2004: 2005: 2006: Umsatz Umsatz Umsatz 8,6 Mio. EUR 8,7 Mio. EUR 10,7 Mio. EUR EBIT EBIT EBIT 0,834 Mio. 0,850 Mio. 2,2 Mio. München 2
3 Inhalt Profiling mit Java Bordmittel Instrumentierung über AspectJ Poor Man's Profiler (JaMon) Rich Man's Profiler (kommerzielle Profiler) Optimierungs-Strategien mit AspectJ 3
4 Profiling mit Java Bordmittel 4
5 Beispiel: einfache Zeitmessung long t = System.currentTimeMillis(); // hier kommt jetzt der zu messende Code... t = System.currentTimeMillis() t; log.info(" Vorgang dauerte " + t + " ms")); s. WebRobot1/src/web/Robot.java 5
6 Beispiel: Speicherverbrauch long mem = getfreememory(); // hier kommt jetzt der zu messende Code... mem = mem getfreememory(); log.info(" Speicherverbrauch: " + mem + " Bytes");... private static long getfreememory() { System.gc(); return Runtime.getRuntime().freeMemory(); } 6
7 Probleme Garbage Collector große Unbekannte kann Zeitmessung verfälschen expliziter Aufruf möglich, aber keine Garantie nur grobe Speichermessung Zeitmessung hängt von der internen Timer-Auflösung ab meist nur als Richtwert zu sehen aber: für einfache (Vergleichs-) Messungen ausreichend 7
8 Tipps Warmup Startup-Time ausfiltern Caches befüllen Messung sollte nicht zu kurz sein auf andere Prozesse achten (Verfälschung) mind. 10-fache Timer-Auflösung (Ungenauigkeit: 10%) nicht unter Windows messen geringe Timer-Auflösung (ca. 16 ms) damit nur geeignet für ältere (langsamere) Rechner Linux System.currentTimeMillis() im ms-bereich System.nanoTime() (seit Java 5) MacOS-X (noch) nicht ausprobiert 8
9 Instrumentierung mit AspectJ 9
10 Schritt 1: Logik herausziehen void around() : Messpunkte() { long t = System.currentTimeMillis(); try { proceed(); // eigentlicher Aufruf } finally { t = System.currentTimeMillis() t; log.info(thisjoinpoint + ": " + t + " ms"); } } s. WebRobot2/src/web/ProfilerAspect.aj 10
11 Schritt 2: Messpunkte definieren // alle Robot.ping() Methoden pointcut Messpunkte() : execution(public void Robot.ping(..)); // oder: alle Robot Methoden pointcut Messpunkte() : execution(public void Robot.*(..)); s. WebRobot2/src/web/ProfilerAspect.aj 11
12 JaMon (poor man's profiler) 12
13 Was ist JaMon? Framework für Zeitmessungen JDBC/SQL-Monitoring HTTP- und EJB-Monitoring 13
14 Einbindung Object around() : Messpunkte() { Monitor mon = MonitorFactory.start(thisJoinPoint.toString()); try { return proceed(); } finally { mon.stop(); log.info(mon); } } s. WebRobot3/src/web/ProfilerAspect.aj 14
15 Auswertung MonitorComposite rootmonitor = MonitorFactory.getRootMonitor(); Monitor[] monitors = rootmonitor.getmonitors(); for (int i = 0; i < monitors.length; i++) { System.out.println(monitors[i]); } s. WebRobot3/src/web/ProfilerStatistics.java 15
16 jamonadmin.jsp 16
17 Optimierungsstrategien mit AspectJ 17
18 Was kostet Zeit? teure Resourcen anfordern und (zu früh) freigeben Abhilfe: Pooling unnötige Zerstörung teurer Objekte Problem: teure Kreierung Abhilfe: Caching Problem muss von Anfang an in der Architektur vorgesehen werden nachträglicher Einbau möglich, aber schwierig Lösung Einbau durch AspectJ 18
19 Beispiel: Verbindungsaufbau Socket aufbauen (teuer): Socket socket = new Socket(hostname, 80); Socket lesen / schreiben Socket freigeben socket.close(); Problem Freigabe: Hmm, vielleicht brauche ich den Socket noch andererseits: nicht benötigte Resourcen sollten freigegeben werden Abhilfe Socket-Pooling lohnt sich aber nur, wenn ich viele Verbindungen habe!!! nächstes Problem: aber da muss ich ja alle Socket-Kreierungen abändern :-( 19
20 Lösung: SocketPoolingAspect /** * Pointcut fuer das Oeffnen bzw. Anlegen eines Sockets */ pointcut socketcreation(string host, int port) : call(public Socket.new(String, int)) && args(host, port) &&!within(socketpool); /** * Pointcut fuer das Schliessen eines Sockets */ pointcut socketclose(socket socket) : call(public void Socket.close()) && target(socket) &&!within(socketpool); s. WebRobot4/src/web/SocketPoolingAspect.java 20
21 Lösung: SocketPoolingAspect (2) /** * Das Oeffnen eines Sockets erfolgt nun ueber den socketpool. * Falls dies fehlschlaegt, wird der Original Pointcut aufgerufen. */ Socket around(string host, int port) throws UnknownHostException, IOException : socketcreation(host, port) { Socket socket = socketpool.getsocket(host, port); if (socket == null) { return proceed(host, port); } else { return socket; } } s. WebRobot4/src/web/SocketPoolingAspect.java 21
22 Zusammenfassung (einfaches) Profiling bereits mit Java- Bordmittel möglich etwas komfortabler geht es mit JaMon AOP/AspectJ kann bei der Instrumentierung helfen Performance-Probleme sind oft Architektur-Probleme! AOP/AspectJ kann bei Architektur- Problemen helfen nachträgliches Einfügen von Caching- /Pooling-Strategien allg.: nachträgliches Einfügen von Zwischen-Schichten immer noch zu langsam? Warten auf neue Hardware,... wie wär's mit Assembler? Was man nicht in Assembler machen kann, muss man löten! 22
23 neugierig auf AOP? Oliver Böhm Aspektorientierte Programmierung mit AspectJ 5 die Seite zum Buch / AOP-Ecke SIG-AspectJ s. Ramnivas Laddad AspectJ in Action Manning Publications Co., 2003, ISBN PatternTesting 23
24 Vielen Dank Oliver Böhm Telefon 0711/
Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
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
Instrumentation von Android Anwendungen mit ExplorViz
Instrumentation von Android Anwendungen mit ExplorViz Jan Witzany 28. September 2016 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 1 / 19 Gliederung 1. Motivation
Programmiermethodik. Übung 10
Programmiermethodik Übung 10 Sommersemester 2011 Fachgebiet Software Engineering [email protected] Agenda Vorstellung Musterlösung HA 6 Client/Server Kommunikation in Java Vorstellung HA 7
Aspekt Orientierte Programmierung
Kapitel 13 Aspekt Orientierte Programmierung 13.1 Aspekte in Apache Wir betrachten den Quellcode des Apache-Servers: Der Code zum XML-Parsen steckt in einer eigenen Klasse (rot) Quelle: aspectj.org 0 ausgearbeitet
Vorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
Advanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg
Advanced Software Engineering WS0910 Kapitel4 Dr. Dominik Haneberg ASPEKT-ORIENTIERTE ENTWICKLUNG 08.02.2010 Advanced Software Engineering 2 Einführung Aspektorientierte Programmierung (AOP) ist ein Programmierparadigma,
Aspektorientierte Middleware Florian Wagner
Anwendungen der Aspektorientierung (5) Übersicht Middleware? Middleware-Concerns Java 2 Enterprise Edition AO Implementierung AOP & JBoss 2 mid dle ware (mĭd'l-wâr') n. Software that serves as an intermediary
Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen
Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für
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
Einstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Rekursion Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Aufgabe 1: Potenzfunktion Schreiben Sie eine Methode, die
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher
Properties und Proxies
g n årà Dr. Winfried Grünewald [email protected] Properties und Proxies Dr. Winfried Grünewald, Stutensee 2011 Version 0.9 2/10 1 Einleitung Die Java Entwicklungsumgebung bietet mit den Properties-Dateien
Ein Jahr mit dem. Play! Framework FLAVIA IT. Dmitrij Funkner & Jonas Kilian. Quelle: http://www.flickr.com/photos/sdasmarchives/6996901834
Ein Jahr mit dem Play! Framework FLAVIA IT Dmitrij Funkner & Jonas Kilian Quelle: http://www.flickr.com/photos/sdasmarchives/6996901834 Über uns dmitrij funkner jonas kilian Konzentration auf das Wesentliche
Connection Pooling. Was ist das?? Unter Connection Pooling versteht man generell die Wiederverwendung physischer Datenbankverbindungen.
Connection Pooling Was ist das?? Unter Connection Pooling versteht man generell die Wiederverwendung physischer Datenbankverbindungen. Wo wird es eingesetzt?? Connection Pooling wird vor allem in Verbindung
Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007
Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung
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
Einstieg in die Informatik mit Java
1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White
Programmiermethodik. Übung 13
Programmiermethodik Übung 13 Sommersemester 2010 Fachgebiet Software Engineering [email protected] Agenda Vorstellung Musterlösung HA9 Mancala Showroom Client/Server Kommunikation in Java
Aspektorientierte Programmierung (aspect-oriented programming, AOP)
Aspektorientierte Programmierung (aspect-oriented programming, AOP) Abstract Die aspektorientierte Programmierung ist ein neues Programmierparadigma, das die Probleme und Nachteile, die aus der prozeduralen
Einstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
Softwaretechnik 1 Übung 5
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Softwaretechnik 1 Übung 5 2.7.29 Aufgabe 1a) Zeichnen Sie die komplette Vererbungshierarchie der Klasse BufferedOutputStream als UML- Klassendiagramm.
Dynamische Speicherverwaltung
Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in
Ausnahmen (Exceptions)
Ausnahmen (Exceptions) Herkömmliche Fehlerbehandlung Jede Methode liefert einen Fehlercode int result; result = p(); if (result == ok) { result = q(); if (result == ok) { result = r(); if (result == ok)
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.4 Exceptions - 1 - Ausnahmen (Exceptions( Exceptions) Treten auf, wenn zur
Referat: Netzwerkprogrammierung in Java
1.)ISO/OSI und Internet Referenzmodell Referat: Netzwerkprogrammierung in Java ISO/OSI 7 Schichtenmodell (1-Bitübertragung, 2-Sicherung, 3-Netzwerk, 4-Transport, 5-Sitzung, 6- Darstellung, 7-Anwendung)
7. Performance und Speicherauslastung
7. Performance und Speicherauslastung Java-Parameter mit Performance-Einfluss Versteckte Speicherlecks Direkte Zeitmessung in Java Konzept von Performance-Messwerkzeugen Netbeans-Profiler Software-Qualität
4. Vererbung Die Klasse Object. Die Klasse Object
4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige
Java - Programmierung - Prozedurale Programmierung 1
Java - Programmierung - Prozedurale Programmierung 1 // elementare Datentypen public class el_dt public static void main(string args []) byte b = 127; short s = 32767; int i = 2147483647; long l = 9223372036854775807L,
Einführung in C. EDV1-04C-Einführung 1
Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags
II.4.4 Exceptions - 1 -
n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen
Universität Karlsruhe (TH)
Universität Karlsruhe (TH) Lehrstuhl für Programmierparadigmen Fortgeschr. Objektorientierung SS 2009 http://pp.info.uni-karlsruhe.de/ Dozent: Prof. Dr.-Ing. G. Snelting [email protected]
Was ist ein Profiler?
Profiling Was ist ein Profiler? (Theorie) Invasives Profiling Nichtinvasives Profiling Profiling in der Praxis gprof, gcov OProfile valgrind/callgrind Intel VTune Was ist ein Profiler? Analyse des Laufzeitverhaltens
Best of Oracle Weblogic Diagnostic Framework
Best of Oracle Weblogic Diagnostic Framework Dr. Frank Munz munz & more München Schlüsselworte: Weblogic Diagnostic Framework, Oracle Weblogic Server 11g, WLS11g, Fusion Middleware, Monitoring, Instrumentierung.
Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff
Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen
Objektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
Verkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
Java-Schulung Grundlagen
Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings
Aspektorientierte Programmierung mit.net
Aspektorientierte Programmierung mit.net David Hahn & Viktor Steinwand 1 1. 2. 3. 4. 5. Vorgehen beim AOP 6. 7. durch AOP 8. 9. 10. 2 1. AOP ist ein mächtiges Werkzeug für den Entwickler-Werkzeugkoffer
Erzeugungsmuster. Kapselung der Objekt-Erzeugung
Erzeugungsmuster Kapselung der Objekt-Erzeugung Definition Erzeugungsmuster dienen für die Lose Koppelung, bei der erst zur Laufzeit der Typ des zu erzeugenden Objekts festgelegt wird. Abstract Factory
Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
EINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt 26.03.2014 [email protected] 25.12.01.30 Bürozeiten: 09 Uhr - 12 Uhr FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert
Theorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {
Hochschule Harz Programmierung1 Aufgabe 10: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Hashing und Generische Klassen Versuchsziele Kenntnisse
Programmieren I + II Regeln der Code-Formatierung
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten
Einstieg in die Informatik mit Java
1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:
Synchronisation in Java. Invisible Web
Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections
Ausnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
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
Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006
Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006 Aufkleber Name: Vorname: Matrikel: Studiengang: inkl. DPO4, B/M, Schwerp., Schreiben Sie zunächst Ihren
Application Frameworks
Seminar Software Engineering 1 Grundlagen Agenda Spring Framework Dependency Injection Aspektorientierte Programmierung Datenbankanbindung Modell View Controller Sicherheit Spring vs. Java EE Zusammenfassung
Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals
MÜNSTER Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals Prof. Dr. Christian Engwer & Andreas Buhr 16. April 2014 MÜNSTER Interaktive Simulationen 2 /22 Normales C++ Programm Programmstruktur
Prüfung Softwareentwicklung II (IB)
Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IB 2 B, IB 2 C Sommersemester 2013 Prüfung Softwareentwicklung II (IB) Datum : 11.07.2013, 08:30 Uhr
