Neue Version (2014) des YourKit Java Profiler released

Der bekannte Java Profiler “YourKit Java Profiler” wurde in einer neuen Version veröffentlicht. Die 2014er Version enthält einige Neuerungen.

Auffällig ist die Anzeige der exakten Zeilennummer in vielen Ansichten wie der CPU Tracing Ansicht. Dies ermöglicht nun eine noch bessere Integration mit allen gängigen IDE’s, da mit der “Open in IDE” Funktion nun auch direkt an die entsprechende Zeile im Sourcecode gesprungen werden kann.

Die Inspections wurden um eine weitere Funktion erweitert, welche neben dem Auffinden von identischen Arrays auch das Auffinden von Objekt Duplikaten ermöglicht. Hierbei werden Objekte der gleichen Klasse angezeigt deren Felder identisch sind.

Die Event-Timeline hat eine zusätzliche Ansicht erhalten, welche die Events nun nicht mehr ausschließlich als Tabelle darstellt, sondern in der Event-Timeline-Chart-View auch eine grafisch aufbereitete Sicht anbietet. Dies ermöglicht einen guten Überblick über das zeitliche Zusammenspiel der gesammelten Events.

Eine Neuerung im JEE Umfeld ist die Tomcat 8 Integration.

Insgesamt wurden einige Verbesserungen in der Performance speziell der Reaktionszeiten der UI und dem Erzeugen der Memory Snapshots vorgenommen.

Neben diesen Änderungen finden wir viele weitere Detailverbesserungen.http://www.yourkit.com/changes/ bietet einen Überblick aller Änderungen der neuen Version.

Posted in Java and Quality | Tagged , , | Leave a comment

TypeScript – Nur ein ECMAScript 6 Lückenbüßer?

Diese berechtigte Frage muss sich TypeScript, das statisch typisierte Superset von JavaScript, gefallen lassen. Schließlich bringt ECMAScript 6, die kommende Version des Standards für JavaScript, viele der in der aktuellen ECMAScript Version 5 vermissten Features mit, welche auch von TypeScript nachgerüstet werden (z.B. klassenbasierte Vererbung und ein Modulsystem). Dabei benötigt ECMAScript 6 keinen Kompilierungsschritt, sondern wird direkt vom Browser verarbeitet.

Auch wenn ECMAScript 6 noch nicht final spezifiziert ist, so rückt dies immer näher. Allmählich tauchen erste Features als Implementierung in den neusten Browserversionen auf – siehe Kompatibilitätsmatrix.

Wird also TypeScript überhaupt gebraucht? Ist es nicht nur eine Übergangslösung?

Continue reading

Posted in Web as a Platform | Tagged , , , , | 1 Comment

Memory Leaks in Java – eine Systematische Analyse – Symptome

Beobachtungen

Bei Speicherproblemen handelt es sich häufig um Probleme welche nicht direkt reproduzierbar sind. Eine Fehlersuche wird hierdurch erschwert.
Professionelle Profiling Tools helfen hier nur bedingt weiter. Mit ihnen können wir Metriken aufnehmen, Systematik und Erfahrung ist dennoch notwendig, um die Informationen korrekt und zielgerichtet zu bewerten.
Zur systematischen Analyse empfiehlt sich eine Beobachtung der Symptome, welche bereits wichtige Informationen zum Eingrenzen des Fehlers liefern können.
Es gibt unterschiedliche Kategorien von Beobachtungen

  • Exceptions
  • Systemverhalten
  • Zeitliches Verhalten / (un-)deterministisches Auftreten
  • durch Tooling gelieferte Ergebnisse

Ein Bewerten unterschiedlicher Beobachtungen hilft hierbei den Fehler einzugrenzen und mögliche Ursachen auszuschließen. Durch ein Bewerten aller Symptome im Zusammenspiel können die möglichen Ursachen eingeschränkt werden.
Continue reading

Posted in Java Basics, Java Runtimes - VM, Appserver & Cloud | Tagged , , , | Leave a comment

Memory Leaks in Java – eine Systematische Analyse – die Jagd beginnt mit dem OutOfMemoryError

Auf der Suche nach Performanceproblemen und Instabilitäten in Java-basierten-Systemen stößt man immer wieder auf Probleme mit der Speicherverwaltung. Das auch in Java Memory-Leaks auftreten können, sollte jedem Entwickler bewußt sein.

OutOfMemoryError Exception – das deutlicheste Symptom

Das deutlichste Symptom, dass es Probleme in der Speicherverwaltung einer Anwendung gibt, ist sicherlich ein OutOfMemoryError. Da diese Exception mit dem Beenden der JVM daherkommt, ist dies sicherlich auch die schmerzhafteste Variante, da dies naturgemäß häufig einen Produktionsausfall hervorruft und somit direkt auch in der Managment-Ebene aufschlägt.

Ein regelmäßiges Neustarten des Servers zu Mitternacht ist hier meist die schnellste Symptombehebung, behebt aber leider nicht die Einflüsse, die das fehlerhafte Speichermanagment auf Aspekte wie zum Beispiel System-Performance hat. Ein Vergrößern des Heap-Speichers verschiebt die Problematik leider nur, da auch hier die Performance und der Durchsatz der Anwendungen leiden kann, bedingt durch den erhöhten Verwaltungsaufwand des großen Heaps.
Ein neues Problem manifestiert sich in Form von hohen Pause-Zeiten des Garbage Collectors und eine überdurchschnittliche CPU Belastung durch den GC.

Nicht immer handelt es sich um ein Speicherleak bedingt durch nicht freigegebenen Objektreferenzen. Wenn es zu einem OutOfMemoryError kommt, genügt das heraufsetzen des Java Heap Speichers auch nicht immer, um Speicherprobleme in den Griff zu bekommen. Teilweise kann dies, wie erwähnt, sogar negative Auswirkungen auf die Gesamtperformance des Systemes haben.
Wir wollen in diesem Blog Post und in einer Reihe weiterer Blog Postings das Thema Memory Leaks in Java aufgreifen und versuchen, hier eine Systematik herauszustellen um MemoryLeaks zu erkennen und Symptome richtig zu deuten.
Mit dem notwendigen Hintergrundwissen, einem methodischen Vorgehen und natürlich den richtigen Werkzeugen ist das Auffinden und Beheben der meisten Speicherprobleme schnell erledigt.
Continue reading

Posted in Java Basics, Java Runtimes - VM, Appserver & Cloud | Tagged , , , , | 1 Comment

Funktionale Programmierung in In-Memory-Grid Systemen

Große Datenmengen im GB und TB Bereich erlauben es nicht, die zu verarbeitenden Daten zur Verarbeitung an den Client zu übertragen. Eines der wichtigen Konzepte in modernen, verteilten In-Memory-Grid Systemen ist es daher, den auszuführenden Code zu den Daten zu bringen.

Die Ausführung von Code in solchen Systemen erscheint oft umständlich und wenig intuitiv für den Programmierer. Das Einbetten von Funktionen in Klassen, welche im Clusterverbund ausgeführt werden können, erzeugt einen zusätzlichen Boilerplate Code, da entsprechende Interfaces implementiert werden müssen. Hier bietet sich funktionale Programmierung an, um Funktionen im Cluster zur Verfügung zu stellen.
Am Beispiel von Scala als Sprache, welche funktionale Programmierung unterstützt, möchte ich zeigen, dass diese beiden Konzepte sehr gut zusammenspielen und somit die korrekte, performante Verwendung von In-Memory-Grid Systemen unterstützt wird.
Als Grid-System findet Hazelcast Verwendung.
Continue reading

Posted in Other languages for the Java VM | Tagged , , , , , | Leave a comment

Spring Boot – Getting started

Im April 2014 wurde die Version 1.0.0 von Spring Boot veröffentlicht. Mittlerweile sind wir bei Version 1.1.4 angekommen. Das Projekt verspricht eine noch schnellere Entwicklung von Anwendungen mit Spring:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that can you can “just run”.

Mit Spring Roo und Grails gab es zwar bereits zuvor zwei Projekte unter dem Dach von Pivotal, mit denen man sehr schnell Anwendungen erzeugen konnte. Beide beschränken sich allerdings auf Webanwendungen. Spring Boot erweitert dieses Spektrum deutlich. Sie möchten ein Projekt mit Spring Integration starten, einen REST-Service anbieten oder auf eine NoSQL-Datenbank zugreifen? Mit Hilfe der sogenannten “Starter POMs” können Sie ein entsprechendes Projekt mit wenigen Zeilen Konfiguration aufsetzen. Durch beliebige Kombination mehrerer solcher “Starter POMs” lässt Sie auch die Infrastruktur für komplexe Anwendungen erzeugen.
Continue reading

Posted in Build, config and deploy, Spring Universe | Tagged , , , , , , , | 1 Comment

TypeScript nun bei GitHub, Compiler soll schneller werden, ECMAScript 6 Features auf der Roadmap

TypeScript LogoTypeScript, das statisch typisierte Superset von JavaScript (Vorstellung auf blog.oio.de), zieht von CodePlex um zu GitHub.
Dies hat Microsoft nun in einem Blogbeitrag bekanntgegeben. Damit folgt Microsoft der Forderung der Community.
Man erhofft sich dadurch eine bessere Zusammenarbeit mit der Community.

Die Issues von CodePlex wurden in den Issue-Tracker von GitHub umgezogen.
Außerdem wurde auch das Wiki umgezogen und hat seinen neuen Platz bei GitHub gefunden.
Continue reading

Posted in Web as a Platform | Tagged , , , , | Leave a comment