Java Flight Recorder article published in Javamagazin May 2017 written in German language. It is Java Flight Recorder version 5.5 with Oracle JDK 8. Any mentioned release dates of JDK 9 are subject to change in this article and under the JDK 9 schedule http://openjdk.java.net/projects/jdk9/
Project Nashorn in JDK 8 prove the way towards the polyglot VM. The article “Nashorn ist die neue JVM-basierte JavaScript-Implementierung im JDK 8 - Der Weg zur polyglotten VM” was written in german language and published in the Java magazin in October 2013. Since JDK 8 was introduced in March 2014 the Nashorn JavaScript Engine performance has constantly increased.
The article "JDK 8 im Fokus der Entwickler" in German language should help to embrace Java SE 8 features by developers and adopting these capabilities to test new applications in an early phase for a proven runtime environment or running JDK 8 in enterprises.
Quarkus, GraalVM und co. Java in der Cloud-Native WeltMichael Frembs
Java hat ein Problem. Es ist für die Cloud-Native Welt zu Ressourcen fressend. Mit Quarkus und der GraalVM gibt es eine Möglichkeit das Problem anzugehen. Die Präsentation wurde in folgendem MeetUp gehalten: https://www.meetup.com/de-DE/IBM-Hybrid-Multi-Cloud-Munich/events/262893313/
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
Reaktive Programmierung hat sich über RxJS in der Web-Entwicklung als Standardentwicklungsmuster etabliert. RxJS selber ist zwar sehr mächtig aber gleichzeitig auch sehr komplex und damit anfällig für Fehler, die aus Unverständnis entstehen. Alleine die Unterscheidung zwischen heißen, kalten und lauwarmen Strömen können einen Entwickler bei dem ersten Kontakt mit dem Framework nachhaltig verwirren.
Die funktionale reaktive Programmierung (FRP) stellt eine Variante reaktiver Programmierung dar. Sie basiert auf einem vergleichsweise kleinen und stringentem Satz an Basisoperationen und Kombinatoren. Diese ermöglichen es, komplexe GUI-Logik modular zu implementieren und dabei typische Fehlerklassen bei der GUI-Entwicklung auszuschließen.
In diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.
Project Nashorn in JDK 8 prove the way towards the polyglot VM. The article “Nashorn ist die neue JVM-basierte JavaScript-Implementierung im JDK 8 - Der Weg zur polyglotten VM” was written in german language and published in the Java magazin in October 2013. Since JDK 8 was introduced in March 2014 the Nashorn JavaScript Engine performance has constantly increased.
The article "JDK 8 im Fokus der Entwickler" in German language should help to embrace Java SE 8 features by developers and adopting these capabilities to test new applications in an early phase for a proven runtime environment or running JDK 8 in enterprises.
Quarkus, GraalVM und co. Java in der Cloud-Native WeltMichael Frembs
Java hat ein Problem. Es ist für die Cloud-Native Welt zu Ressourcen fressend. Mit Quarkus und der GraalVM gibt es eine Möglichkeit das Problem anzugehen. Die Präsentation wurde in folgendem MeetUp gehalten: https://www.meetup.com/de-DE/IBM-Hybrid-Multi-Cloud-Munich/events/262893313/
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
Reaktive Programmierung hat sich über RxJS in der Web-Entwicklung als Standardentwicklungsmuster etabliert. RxJS selber ist zwar sehr mächtig aber gleichzeitig auch sehr komplex und damit anfällig für Fehler, die aus Unverständnis entstehen. Alleine die Unterscheidung zwischen heißen, kalten und lauwarmen Strömen können einen Entwickler bei dem ersten Kontakt mit dem Framework nachhaltig verwirren.
Die funktionale reaktive Programmierung (FRP) stellt eine Variante reaktiver Programmierung dar. Sie basiert auf einem vergleichsweise kleinen und stringentem Satz an Basisoperationen und Kombinatoren. Diese ermöglichen es, komplexe GUI-Logik modular zu implementieren und dabei typische Fehlerklassen bei der GUI-Entwicklung auszuschließen.
In diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.
http://www.jug.ch/html/events/2014/javafx_jumpstart.html
JavaFX - nun endlich ist es soweit. Swing ist offiziell seit Java8 im reinen Wartungsmodus, JavaFX ist der Nachfolger und nun endlich Teil des JDK. Also alles deutet auf neue Zeiten in der Desktopentwicklung hin.. ABER..
Wie kann ich mit JavaFX beginnen?
Wie kann ich es mit Swing Projekten kombinieren?
Gibt es Test-Tools?
Wie beginne ich mit der Migration von Swing auf JavaFX?
Diese oder ähnliche Fragen stellen sich zu Beginn der Arbeit mit JavaFX
Wir werden uns den Start mit JavaFX, Werkzeuge wie TestFX und Kombinationen mit CDI und Swing ansehen.
english: (german see below)
target of this bkr-workflow framework is to use a workflow based framework wiithin your java-programms (micro-workflow) to improve operation and maintenance of your software system, exspecially for long running complex projects, where your staff is replaced during project runtime.
We developed it in a real software project with a project runtime of 7 yaers.
deutsch:
Ziel des bkr-workflow framework ist es die Weiterentwicklung und Pflege von Java Programmen in komplexen Softwareprojekten durch Einsatz eines workflow-frameworks (micro-workflow) sicherzustellen und zu verbessern. Dieses Vorgehen ist besonders gut geeignet um gleichartige Programmstrukturen zu erzeigen, auch wenn während der Projektlaufzeit wesentliche Teile der Mitarbeiter ersetzt werden müssen. Das System wurde im Rahmen eines komplexen Softwareentwicklungsprojektes entwickelt und dabei erfolgreich eingesetzt.
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer JungNETWAYS
Ein großer Teil der Geschäftslogik von Unternehmen ist heute in Java-Software abgebildet. Dennoch werden Java-Anwendungen nur allzu häufig als Black Box betrieben und die Analyse von Störungen sehr schnell an Entwicklungsabteilungen delegiert. Diesen steht jedoch in der Regel keine für eine Ursachenanalyse ausreichende Informationsbasis zur Verfügung, so dass Operations und Entwicklung sich auf eine langwierige und schmerzhafte Suche machen.
Dabei bietet die Java-Plattform durchaus interessante Möglichkeiten der Überwachung, die eine schnelle Eingrenzung der Wurzelursache erleichtern, aber leider noch zu wenig bekannt sind und kaum genutzt werden. Im Vortrag werden zunächst einige Grundlagen hierfür vorgestellt, insbesondere JMX. Am Beispiel von Apache Tomcat vertiefen wir, welche für das Monitoring sehr spannenden Parameter dort zur Verfügung stehen, aber auch welche Probleme dieser Ansatz mit sich bringt.
Ein kurzer Ausflug in die Analyse von Java-Thread Dumps schließt den Vortrag ab. Thread Dumps sind der wichtigste – das Monitoring ergänzende – Ansatz für das Troubleshooting von Java-Anwendungen, insbesondere wenn es um Performance-Probleme in verteilten Landschaften geht. Nicht zu vergessen: diese Methode kann auch in Produktion verwendet werden.
Java-Anwendungen betreiben mit DurchblickTobias Frech
Was tun, wenn ein Troubleshooting in der Produktion, eine Analyse eines Lasttests oder einfach die Unterstützung der Entwicklung auf anderen Systemen durch den Betrieb angesagt ist? Ein langjähriger Java-Administrator öffnet seinen Erfahrungsschatz und berichtet, welche Werkzeuge und Vorgehensweisen sich für ihn in diesen Fällen bewährt haben:
Bei den Werkzeugen geht es um die im JDK mitgelieferten jstat/jinfo/jmap und das neue jcmd. Auf der grafischen Seite sollte jeder Entwickler und Admin die Möglichkeiten der VisualVM kennen. Damit Troubleshooting möglichst erfolgreich abläuft und der Lasttest einen Erkenntnisgewinn über das System bringt, muss man sich nicht auf das Glück verlassen, sondern kann dies mit einem systematischen Vorgehen zuverlässig und wiederholbar meistern.
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerJomaSoft
Durch die Nutzung von Solaris LDoms und Zonen können Applikationen ohne Anpassungen auf die neuen SPARC M7 Server migriert werden. Mit dem Tool VDCF sehr effizient.
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Diese Folien beschreiben die wichtigsten Informationen rund um das Thema MVVM mit WPF. Dazu gehört ein Vergleich von Frameworks, die Erläuterung von IoC Containern, die Klärung was MVVM ist und vieles mehr.
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15Wolfgang Weigend
JDK 15 is the open-source reference implementation of version 15 of the Java SE Platform, as specified by by JSR 390 in the Java Community Process. JDK 15 reached General Availability on 15 September 2020. Production-ready binaries under the GPL are available from Oracle; and others. The features and schedule of this release were proposed and tracked via the JEP Process, as amended by the JEP 2.0 proposal. The release was produced using the JDK Release Process (JEP 3).
http://www.jug.ch/html/events/2014/javafx_jumpstart.html
JavaFX - nun endlich ist es soweit. Swing ist offiziell seit Java8 im reinen Wartungsmodus, JavaFX ist der Nachfolger und nun endlich Teil des JDK. Also alles deutet auf neue Zeiten in der Desktopentwicklung hin.. ABER..
Wie kann ich mit JavaFX beginnen?
Wie kann ich es mit Swing Projekten kombinieren?
Gibt es Test-Tools?
Wie beginne ich mit der Migration von Swing auf JavaFX?
Diese oder ähnliche Fragen stellen sich zu Beginn der Arbeit mit JavaFX
Wir werden uns den Start mit JavaFX, Werkzeuge wie TestFX und Kombinationen mit CDI und Swing ansehen.
english: (german see below)
target of this bkr-workflow framework is to use a workflow based framework wiithin your java-programms (micro-workflow) to improve operation and maintenance of your software system, exspecially for long running complex projects, where your staff is replaced during project runtime.
We developed it in a real software project with a project runtime of 7 yaers.
deutsch:
Ziel des bkr-workflow framework ist es die Weiterentwicklung und Pflege von Java Programmen in komplexen Softwareprojekten durch Einsatz eines workflow-frameworks (micro-workflow) sicherzustellen und zu verbessern. Dieses Vorgehen ist besonders gut geeignet um gleichartige Programmstrukturen zu erzeigen, auch wenn während der Projektlaufzeit wesentliche Teile der Mitarbeiter ersetzt werden müssen. Das System wurde im Rahmen eines komplexen Softwareentwicklungsprojektes entwickelt und dabei erfolgreich eingesetzt.
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer JungNETWAYS
Ein großer Teil der Geschäftslogik von Unternehmen ist heute in Java-Software abgebildet. Dennoch werden Java-Anwendungen nur allzu häufig als Black Box betrieben und die Analyse von Störungen sehr schnell an Entwicklungsabteilungen delegiert. Diesen steht jedoch in der Regel keine für eine Ursachenanalyse ausreichende Informationsbasis zur Verfügung, so dass Operations und Entwicklung sich auf eine langwierige und schmerzhafte Suche machen.
Dabei bietet die Java-Plattform durchaus interessante Möglichkeiten der Überwachung, die eine schnelle Eingrenzung der Wurzelursache erleichtern, aber leider noch zu wenig bekannt sind und kaum genutzt werden. Im Vortrag werden zunächst einige Grundlagen hierfür vorgestellt, insbesondere JMX. Am Beispiel von Apache Tomcat vertiefen wir, welche für das Monitoring sehr spannenden Parameter dort zur Verfügung stehen, aber auch welche Probleme dieser Ansatz mit sich bringt.
Ein kurzer Ausflug in die Analyse von Java-Thread Dumps schließt den Vortrag ab. Thread Dumps sind der wichtigste – das Monitoring ergänzende – Ansatz für das Troubleshooting von Java-Anwendungen, insbesondere wenn es um Performance-Probleme in verteilten Landschaften geht. Nicht zu vergessen: diese Methode kann auch in Produktion verwendet werden.
Java-Anwendungen betreiben mit DurchblickTobias Frech
Was tun, wenn ein Troubleshooting in der Produktion, eine Analyse eines Lasttests oder einfach die Unterstützung der Entwicklung auf anderen Systemen durch den Betrieb angesagt ist? Ein langjähriger Java-Administrator öffnet seinen Erfahrungsschatz und berichtet, welche Werkzeuge und Vorgehensweisen sich für ihn in diesen Fällen bewährt haben:
Bei den Werkzeugen geht es um die im JDK mitgelieferten jstat/jinfo/jmap und das neue jcmd. Auf der grafischen Seite sollte jeder Entwickler und Admin die Möglichkeiten der VisualVM kennen. Damit Troubleshooting möglichst erfolgreich abläuft und der Lasttest einen Erkenntnisgewinn über das System bringt, muss man sich nicht auf das Glück verlassen, sondern kann dies mit einem systematischen Vorgehen zuverlässig und wiederholbar meistern.
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerJomaSoft
Durch die Nutzung von Solaris LDoms und Zonen können Applikationen ohne Anpassungen auf die neuen SPARC M7 Server migriert werden. Mit dem Tool VDCF sehr effizient.
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Diese Folien beschreiben die wichtigsten Informationen rund um das Thema MVVM mit WPF. Dazu gehört ein Vergleich von Frameworks, die Erläuterung von IoC Containern, die Klärung was MVVM ist und vieles mehr.
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15Wolfgang Weigend
JDK 15 is the open-source reference implementation of version 15 of the Java SE Platform, as specified by by JSR 390 in the Java Community Process. JDK 15 reached General Availability on 15 September 2020. Production-ready binaries under the GPL are available from Oracle; and others. The features and schedule of this release were proposed and tracked via the JEP Process, as amended by the JEP 2.0 proposal. The release was produced using the JDK Release Process (JEP 3).
The document discusses Java Development Kit (JDK) versions 10 and OpenJDK. It provides an overview of JDK 10 including new features like local variable type inference and consolidating the JDK source code into a single repository. It also discusses migrating to JDK 10 and modular development. Finally, it covers OpenJDK, the open source version of Java, including its release cycle and Oracle's OpenJDK builds.
This document provides an agenda and slides for a presentation on Java 10. The agenda includes discussing Java version numbers, Java in containers and open source, migrating to JDK 10, and features of JDK 10. Key features presented are the Java module system, local variable type inference, application class data sharing, root certificates, and the experimental ZGC garbage collector. The slides provide details on each topic and are copyrighted by Oracle.
The document discusses the new versioning scheme for JDK 9, which simplifies the version numbers. Key points include:
1. Version numbers will now be in the format of major.minor.security (e.g. 9.0.1) rather than the previous format.
2. The G1 garbage collector will be the default collector in JDK 9.
3. JEP 222 introduces jshell, a read-eval-print loop for Java that allows interactive testing of code snippets.
Personal snapshot of the JavaFX eco system in Germany at 25th of October 2017 to work with JavaFX 8 as JDK 8 Update 151 and developer preparation for JavaFX 9 with JDK 9.0.1
The article "JDK 9 und die Plattformmodularisierung - Die Stichsäge kommt voran" was published in the German Javamagazin 1.2016 and describes the current snapshot of project Jigsaw with the Java platform modularization in the JDK 9 early access release build 83. Examples of the current tool set are included, like jdeps, jimage and jlink as of JDK 9 EA b83. Please be aware of newer JDK 9 early access release builds and the changed proposed JDK 9 release schedule. The proposed date for JDK 9 general availability should be expected in late march 2017 but always check first JDK 9 release schedule at http://openjdk.java.net/projects/jdk9/
The JAXenter article "Automated testing of JavaFX GUI components - Testing JavaFX 8 UI application functionality" describes how JavaFX 8 UI controls could be tested by the automated testing tool QF-Test to enable and proceed test cases lead by the business users. The maturity as given for JavaFX 8 applications, i.e. build with JDK8u40, corresponds to the required quality of the UI, by passing the automated structural test cases.
This is an overview about Java Mission Control and Java Flight Recorder which is part of the Oracle JDK since JDK 7u40. The purpose of JFR is to have a continuous recording about the behavior of the JVM and the Java application at the same time. You can walk back in time and find out whats going on, to discover a specific problem situation in history
The JAXenter article "Automatisiertes Testen von JavaFX GUI-Komponenten" in German language describes how
JavaFX 8 UI controls could be tested by the automated testing tool QF-Test to enable and proceed test cases lead by the business users. The maturity as given for JavaFX 8 applications, i.e. build with JDK8u40, corresponds to the
required quality of the UI, by passing the automated structural test cases.
The article "WebLogic Server verwendet die Basis 12 - Das Dutzend ist voll" was published in the German Java Magazin 9.2012 and introduces WebLogic Server 12c with the complete Java EE 6 certification. Now WebLogic Server 12.1.3 supports Java SE 8 since JavaOne 2014 and WebLogic Server 12.1.3 supports some of the Java EE 7
specifications until it's fully Java EE 7 certified with WLS 12.2.1.
The article "JavaFX goes Open Source" was published in the German Java Magazin in May 2013 and discussed JavaFX on iOS and Android with their implementations.
The outlook from May 2013 comes true and showed an architecture diagram, how mobile applications could be created with OpenJFX & OpenJDK by the Java developer community using e.g. RoboVM for iOS.
1. SPRING5
magazin
JAVAMag
Datenbankmigration
mit Liquibase S. 89
Agile
Produktentwicklung S. 76
Java 9 mit
Projekt Jigsaw S. 12
Java | Architektur | Software-Innovation
Depiano/Shutterstock.com
www.javamagazin.de
Deutschland €9,80
Österreich € 10,80
Schweiz sFr 19,50
Luxemburg €11,15
Ausgabe 5.2017
DerLenzistda
Programminfos
ab Seite 35!
JavaMagazin5.2017 Java9AgileSpringDatenbankenAngularEclipseJavaScript
2. javamagazin 5|2017
Java Core Flight Recorder
20 www.JAXenter.de
von Wolfgang Weigend
Der Java Flight Recorder bildet zusammen mit der Ma-
nagementkonsole Java Mission Control ein Toolset für
Java. Java Mission Control (JMC) ist ein etabliertes
Werkzeug für das Monitoring, Profiling und die Diag-
nose von Java-Anwendungen. Es ist im Oracle JDK ent-
halten und lässt sich mit beliebigen Java-Anwendungen
und Applikationsservern verwenden, von der Entwick-
lung bis zum produktiven Betrieb. Als Bundle mit der
HotSpot Java Virtual Machine ist JMC als Client oder
als Eclipse-Version seit dem Oracle JDK 7 Update 40
verfügbar. Es basiert auf dem Eclipse RCP.
Mit dem Kommando C:JAVA_HOMEbinjmc.
exe wird Java Mission Control beispielsweise unter
Microsoft Windows gestartet. JMC lässt sich über ein
Oracle-Plug-in auch direkt in die Eclipse-IDE integrie-
ren. Die auf dem System laufenden Java-Prozesse wer-
den in einer Baumstruktur im JVM-Browser angezeigt,
und mittels Doppelklick wird der darunter liegende
MBean-Server oder der Flight Recorder ausgewählt. Der
MBean-Server vom Clock Applet Viewer zeigt allgemei-
ne Informationen zum Prozessor- und Heap-Verbrauch,
Memory, Code, Threads, I/O, Systeminformationen
und Eventtypen an (Abb. 1). Wird der Flight Recorder
per Doppelklick ausgewählt, bekommt man zuerst den
Hinweis, dass die kommerziellen Features nicht freige-
geben sind. Seit JDK 8 Update 40 wird gefragt, ob man
die kommerziellen Features zum Start des Flight Recor-
ding automatisch freigeben möchte, mit dem Hinweis,
dass die kommerziellen Features dem Oracle Binary
Code License Agreement unterliegen [5].
Nach einer positiven Antwort wird der Flight Re-
corder Wizard aktiviert und bietet die Aufnahme-
dauer von beispielsweise einer Minute an. Im darauf
folgenden Wizard-Dialog können die Aufzeichnungs-
parameter ausgewählt werden. Sämtliche Konfigura-
tionsparameter der grafischen Oberfläche lassen sich
auch über die Kommandozeilenebene JDK/bin/jcmd
<pid> <cmd> einstellen (Listing 1). Existierende JFR-
Plug-ins gibt es für WebLogic und JavaFX. Andere
Java-Programme lassen sich über die Kommandozei
lenebene mit dem Flight Recorder ebenfalls aufzeich-
nen. Die JFR-Freigabeparameter können dauerhaft in
der Konfigurationsdatei C:JAVA_HOMEbinjmc.ini
für die JVM gesetzt werden:
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true
Java Flight Recorder
Der Flugdatenschreiber
Der Java Flight Recorder ist mit einem echten Flugdatenschreiber vergleichbar. Die auf ihm gespeicher-
ten Informationen werden wichtig, wenn etwas schief gelaufen ist. Mit seiner einheitlichen Datenbasis
hilft der Flight Recorder außerdem Administratoren und Entwicklern dabei, gemeinsam an Problemlö-
sungen zu arbeiten und Konflikte besser und schneller bewältigen zu können.
Entstehung der Werkzeuge
Die ursprüngliche Entwicklung der Werkzeuge JRockit Mission
Control Console, JRockit Runtime Analyzer, JRockit Memory
Leak Detector und JRCMD (CLI für Diagnosekommandos) fand
im JRockit Virtual Machine Team statt. Unter BEA Systems
wurde der Runtime Analyzer durch den JRockit Flight Recor-
der ersetzt. Mit der Firmenübernahme von BEA Systems und
Sun Microsystems durch Oracle wurde Java Mission Control
(JMC) und Java Flight Recorder (JFR) für die HotSpot JVM im
Oracle JDK 7 Update 40 weiterentwickelt. Es ist mit der Ver-
sion JMC und JFR 5.5, basierend auf Eclipse 4.4, im Oracle
JDK 8 enthalten [1] und für die Betriebssysteme Microsoft
Windows, Linux und Mac OS X zertifiziert [2]. JMC und JFR sind
als eingebundene Werkzeuge mit Java SE Advanced Support
paketiert [3], [4], sodass sie nur über einen expliziten Java-
SE-Advanced-Support-Vertrag kommerziell verwendet werden
dürfen. Die kostenfreie Verwendung von JMC und JFR ist nur zum
Selbststudium oder zur privaten Eigenentwicklung erlaubt. JMC
ermöglicht das direkte JVM-Online-Monitoring mittels JMX und
visualisiert die vom JFR gesammelten Daten. JFR übernimmt die
Offline-Profiling- und Diagnosefunktion während des gesamten
Applikationslebenszyklus, von der Anwendungsentwicklung über
Test, Integration bis zum Anwendungsbetrieb mit einer kontinu-
ierlichen Optimierung.
3. javamagazin 5 |2017
Java CoreFlight Recorder
21www.JAXenter.de
Architektur des Java Flight Recorders
Der Java Flight Recorder ist ein Event Recorder, der
direkt mit der Java Virtual Machine (JVM) verzahnt
ist und alle verfügbaren JVM-Laufzeitparameter lie-
fert [6]. Die Messung zeigt das tatsächliche Verhalten
der eingeschalteten JVM-Optimierungsparameter. Die
Aufzeichnung erfolgt in einem kompakten Binärfor-
mat, das alle notwendigen Informationen zur späteren
Analyse und Diagnose enthält. Das proprietäre Binär-
format ist für schnelles Schreiben und Lesen ausgelegt
und lässt sich komprimieren. Der Mehraufwand für
die Aufzeichnung beträgt rund drei Prozent einer be-
stehenden Anwendungsinfrastruktur. Der Einsatz vom
JFR wurde für den dauerhaften Betrieb konzipiert, eine
JFR-Datei lässt sich jederzeit erzeugen. Kontinuierli-
che Aufnahmen haben kein definiertes Ende, und man
muss eine JFR-Datei über dumponexit=true explizit er-
zeugen. Es lassen sich aber auch zeitlich fest definierte
Aufnahmen durchführen.
Der Flight Recorder sammelt über Events sowohl die
Informationen der JVM durch interne APIs als auch die
Daten der darauf laufenden Java-Anwendung über das
Java-API. Die erzeugten Daten werden in kleine lokale
Threadbuffer gespeichert. Nach dem Erreichen der ma-
ximalen Threadbufferkapazität werden sie in globale
In-Memory-Buffer kopiert und schließlich auf die Fest-
platte geschrieben. Dabei gibt es keine überlappenden
Informationen der Threadbuffer und Globalbuffer, so-
dass sich ein betreffendes Datensegment entweder noch
im Speicherbereich der Bufferstruktur befindet oder be-
reits auf die Festplatte gespeichert worden ist (Abb. 2).
Durch die gleichzeitige Aufnahme von Java-Anwen-
dungsinformationen und den JVM-Informationen, wie
Class Loading, Code-Cache-Compiler, Garbage Col
Abb. 1: Beim Start zeigt der MBean-Server vom Clock Applet Viewer allgemeine Informationen an, z. B. zum Prozessor- und Heap-Verbrauch,
Memory oder Threads
Listing 1: Kommandozeilenbeispiel „jcmd“ mit Flight Recording für Clock Applet
C:>jcmd
1936
7108 sun.plugin2.main.client.PluginMain
read_pipe_name=jpi2_pid1936_pipe1,
write_pipe_name=jpi2_pid1936_pipe2
4264
7512 sun.tools.jcmd.JCmd
C:jcmd 7108 help
7108:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.check_commercial_features
VM.unlock_commercial_features
..
For more information about a specific command
use 'help command'.
C:jcmd 7108 VM.unlock_commercial_features
7108:
Commercial Features now unlocked.
C:jcmd 7108 JFR.start name=MyRecording
settings=profile delay=20s duration=2m
filename=c:tempmyrecording.jfr
7108:
Recording 3 scheduled to start in 20 s. The
result will be written to:
C:tempmyrecording.jfr
4. javamagazin 5|2017
Java Core Flight Recorder
22 www.JAXenter.de
lector und Laufzeitumgebung, bekommt man eine ein-
heitliche Sicht zur fokussierten Analyse und Diagnose.
Aus der JMC-Konsole lässt sich über Create a new
connection die Remote-Verbindung zu einer entfern-
ten JVM herstellen, unter Angabe von Hostnamen, Port
und Benutzer mit Passwort.
JFR-Aufzeichnungsbeispiele und Analyse
Es gibt zwei Arten von Aufzeichnungen. Die erste Va-
riante besteht aus kontinuierlichen JFR-Aufnahmen
ohne definiertes Ende. Man muss durch ein explizites
Dump-Kommando oder mit dem Diagnostic-Komman-
do JFR.dump das laufende Flight Recording beenden.
Dabei können die letzten Minuten vor einem Fehler
ausgegeben werden. Die zweite Aufzeichnungsvariante
besitzt eine feste Aufnahmezeit und wird als Profiling
Recording bezeichnet. Falls diese aus der Java Mission
Control Console gestartet wurde, wird die grafische
Oberfläche automatisch mit der aufgezeichneten JFR-
Datei geöffnet. Diese Variante wird bei Performance-
und Lasttests empfohlen, um beispielsweise 30 Minuten
aufzuzeichnen. Zum besseren Analyseverständnis ist es
notwendig, die Anwendung zu kennen und zu wissen,
ob hoher Durchsatz oder niedrige Latenzzeiten im Vor-
dergrund stehen, oder wie hoch der Prozessorverbrauch
tatsächlich sein soll. Zur Flight-Recording-Analyse be-
Abb. 2: Die Architektur des Java Flight Recordes
Problem Lösung
Lock contention + Monitor enter events
Excessive class loading + Class loading events
Expenses of redundant exception logging + Through method profiling information and lock contention information
Context switches + Through context switch rate events
Processor burn rate + Method profiling events
GC thrashing + All the various GC events
Tabelle 1: Beispielszenarien zur Diagnose interner JVM-Information mit JMC/JFR 5.5
Listing 2: Codebeispiel „02_JFR_HotMethods HotMethods.java“
import java.io.IOException;
import com.oracle.jrockit.jfr.EventToken;
import com.oracle.jrockit.jfr.InstantEvent;
import com.oracle.jrockit.jfr.Producer;
public class HotMethods {
// Hint: You may want to set NUMBER_OF_THREADS
// close to the number of hardware threads for
// maximum saturation
private static final int NUMBER_OF_THREADS = 4;
private static final String PRODUCER_URI = http://
www.oracle.com/jmc/tutorial/example2;
static final Producer PRODUCER;
static final EventToken WORK_EVENT_TOKEN;
static {
PRODUCER = createProducer();
WORK_EVENT_TOKEN = createToken(WorkEvent.
class);
PRODUCER.register();
}
/**
* Creates our event token.
*/
public static EventToken createToken(Class?
extends InstantEvent clazz) {
try {
return PRODUCER.addEvent(clazz);
} catch (Exception e) {
// Add proper exception handling.
e.printStackTrace();
}
return null;
}
/**
* Creates our producer.
*/
private static Producer createProducer() {
try {
return new Producer(Tutorial Example 2,
A demo event producer for the HotMethods
Example., PRODUCER_URI);
} catch (Exception e) {
// Add proper exception handling.
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws
IOException {
Thread[] threads = new Thread[NUMBER_OF_
THREADS];
for (int i = 0; i threads.length; i++ ) {
threads[i] = new Thread(new Worker(), Worker
Thread + i);
threads[i].setDaemon(true);
threads[i].start();
}
System.out.print(Press enter to quit!);
System.out.flush();
System.in.read();
}
}
6. javamagazin 5|2017
Java Core Flight Recorder
24 www.JAXenter.de
nötigt man ein gewisses Maß an Erfahrung und Übung
im Umgang mit den Werkzeugen (Tabelle 1). Die prak-
tischen Übungen aus dem Java Mission Control Tuto-
rial [7] von Marcus Hirt [8] verdeutlichen den Umgang
mit dem Java Flight Recorder.
Lässt man das Beispiel 02_JFR_HotMethods mit
Eclipse laufen (Listing 2) und startet den Flight Re-
corder, erkennt man in der Aufzeichnung flight_
recording_18045HotMethods3224.jfr (Abb. 3), dass
viel Zeit in der Methode LinkedList.indexOf(Object)
verbracht wird. Schaut man sich die Aufzeichnung in
der JMC-Konsole unter dem Menüpunkt Code und
Hot Methods an, erkennt man, dass die Methode
contains durchlaufen wird. contains verhält sich in ei-
ner LinkedList proportional zur Anzahl der Einträge.
Durch ein HashSet könnte dies in kürzerer Zeit ablau-
fen. Mit einem Blick auf die JMC-Konsole unter dem
Menüpunkt Code und der Ansicht Call Tree kann
man herausfinden, wo contains aufgerufen wird. Folgt
man im Stack Trace dem größten Ressourcenver-
brauch von 99,85 Prozent bei java.lang.Thread.run(),
gelangt man zu java.util.LinkedList.indexOf(Object)
mit einem hohen Ressourcenverbrauch von 99,37 Pro-
zent. Ersetzt man im Programmcode Initiator.java (Lis-
ting 3) die Zeile collection = new LinkedListInteger();
mit collection = new HashSetInteger();, läuft das
Programmbeispiel JFR_HotMethods viel schneller
und spart Ressourcen, wie in der Aufzeichnung flight_
recording_18045HotMethods948.jfr in Abbildung 4
dargestellt.
Das nächste Codebeispiel verdeutlicht das Allokati-
onsverhalten, hervorgerufen durch eine ungünstige Aus-
wahl von Datentypen. Wird das Beispiel 04_JFR_GC
mit dem Programm Allocator.java (Listing 4) in der
Listing 3: Codebeispiel „02_JFR_HotMethods Initiator.java“
import java.util.*;
public class Initiator {
private CollectionInteger collection;
public Initiator() {
collection = new LinkedListInteger();
// collection = new HashSetInteger();
}
// Hint: This creates a list of unique
// elements!
public void initiate(int seed) {
collection.clear();
for (int i = 1; i 10000; i++) {
if ((i % seed) != 0)
collection.add(i);
}
}
protected CollectionInteger getCollection()
{
return collection;
}
public int countIntersection(Initiator other) {
int count = 0;
for (Integer i : collection) {
if (other.getCollection().contains(i)) {
count++;
}
}
return count;
}
}
Abb. 3: Die JMC-Call-Tree-Ansicht für „flight_recording_18045HotMethods3224.jfr“ zeigt, dass viel Zeit in der Methode „LinkedList.
indexOf(Object)“ verbracht wird
8. javamagazin 5|2017
Java Core Flight Recorder
26 www.JAXenter.de
Eclipse-IDE gestartet und aktiviert man den Flight Re-
corder, erkennt man in der JMC-Konsole unter dem
Menüpunkt Memory und Garbage Collection ei-
nen extrem breiten ansteigenden Sägezahnverlauf in der
Aufzeichnung flight_recording_18045Allocator6764.
jfr (Abb. 5), der den Used-Heap-Verbrauch mit ca.
22 MB zeigt. Nun stellt sich die Frage, welche Objek-
te am häufigsten allokiert werden. Es sind reichlich
Integer-Allokationen vorhanden. Daraus ergibt sich die
nächste Frage: Was hat die Allokationen und die Gar-
bage Collections verursacht? Die JMC-Console-Ansicht
Code, Call Tree und Stack Trace mit java.util.
HashMap$ValueIterator.next() lässt erahnen, dass die
Allokationen durch CollectionMyAlloc myAllocSet
= map.values(); verursacht worden sein könnten, weil
Allocator ständig den Primitive Type int zum Object
Type Integer umgewandelt hat, siehe auch Codezeile if
(!map.containsKey(c.getId())) in Listing 4. Falls Primi
tive Types als Index in HashMaps verwendet werden, ist
es besser, die Object-Type-Version zu speichern als stän-
dig zwischen dem Primitive Type int und dem Object
Type Integer hin und her zu wechseln. Ersetzt man jeden
Primitive Type int mit dem Object oder Reference Type
Integer in der Klasse MyAlloc, reduziert sich die Anzahl
der Garbage Collections erheblich. Nach der Codeän-
derung in Allocator.java (Listing 5) zeigt die Aufzeich-
nung flight_recording_18045Allocator1432.jfr (Abb. 6)
den ansteigenden Sägezahnverlauf, aber ohne die zuvor
Abb. 4: Nach der Codeänderung ist das Programm schneller und spart Ressourcen, wie die Call-Tree-Ansicht für „flight_
recording_18045HotMethods948.jfr“ zeigt
Listing 4: Codebeispiel „04_JFR_GC Allocator.java“ mit „int“ und „Integer“
import java.util.Collection;
import java.util.HashMap;
public class Allocator {
private HashMapInteger, MyAlloc map = new
HashMapInteger, MyAlloc();
private static class MyAlloc {
private int id;
private MyAlloc(int id) {
this.id = id;
}
private int getId() {
return id;
}
}
public static void main(String[] args) {
new Allocator().go();
}
private void go() {
alloc(10000);
long yieldCounter = 0;
while(true) {
CollectionMyAlloc myAllocSet = map.values();
for (MyAlloc c : myAllocSet ) {
if (!map.containsKey(c.getId()))
System.out.println(Now this is strange!);
if (++yieldCounter % 1000 == 0)
Thread.yield();
}
}
}
private void alloc(int count) {
for (int i = 0; i count; i++) {
map.put(i, new MyAlloc(i));
}
}
}
9. javamagazin 5 |2017
Java CoreFlight Recorder
27www.JAXenter.de
sichtbare breite Verzerrung, und der Used-Heap-Ver-
brauch hat sich auf rund 8 MB verringert.
Fazit und Ausblick
Die Verwendung der Werkzeuge Java Mission Con-
trol und Java Flight Recorder bringt einige Vorteile,
weil man schneller und strukturiert potenzielle Feh-
ler erkennt. Aufgrund der gemeinsamen Datenbasis
mit JFR-Dateien können Entwickler, Administratoren
und Supportmitarbeiter während des gesamten Appli-
kationslebenszyklus besser zusammenarbeiten, ohne
lästiges Verschieben von Zuständigkeiten oder abge-
grenzten Verantwortungsbereichen. Voraussetzung für
ein erfolgreiches Zusammenspiel der unterschiedlichen
Abb. 5: Die Garbage-Collections-Ansicht für „flight_recording_18045Allocator6764.jfr“ zeigt einen steilen Sägezahnanstieg
IT-Rollen ist, dass jeder in seinem Gebiet genügend Er-
fahrungen mit den eingesetzten Unternehmensanwen-
dungen inklusive den passenden Werkzeugen sammeln
kann und sich strukturiert mit seinen Kollegen austau-
schen kann. Mit der zunehmenden Komplexität der
Anwendungslandschaft wächst auch die Werkzeugaus-
stattung von Entwicklern und Administratoren in den
Unternehmen. Dass die Werkzeuge Bestandteil vom
Oracle-Java-SE-Advanced-Support sind [3], ist oft eine
Hürde. Die Unternehmen, die sich einer notwendigen
Java-Werkzeugausstattung für ihre IT-Umgebung be-
wusst sind, wählen zwischen Third-Party-Werkzeugen
und den JMC-/JFR-Werkzeugen aus und haben auch ein
Budget dafür eingeplant. Im anderen Fall versuchen Un-
Listing 5: Codebeispiel „04_JFR_GC Allocator.java“ mit Integer
import java.util.Collection;
import java.util.HashMap;
public class Allocator {
private HashMapInteger, MyAlloc map = new
HashMapInteger, MyAlloc();
private static class MyAlloc {
private Integer id;
private MyAlloc(Integer id) {
this.id = id;
}
private Integer getId() {
return id;
}
}
public static void main(String[] args) {
new Allocator().go();
}
private void go() {
alloc(10000);
long yieldCounter = 0;
while(true) {
CollectionMyAlloc myAllocSet = map.values();
for (MyAlloc c : myAllocSet ) {
if (!map.containsKey(c.getId()))
System.out.println(Now this is strange!);
if (++yieldCounter % 1000 == 0)
Thread.yield();
}
}
}
private void alloc(Integer count) {
for (Integer i = 0; i count; i++) {
map.put(i, new MyAlloc(i));
}
}
}
10. javamagazin 5|2017
Java Core Flight Recorder
28 www.JAXenter.de
ternehmen ohne Werkzeugbeschaffung auszukommen
oder jeweils die einzelnen Entwickler und Administra-
toren in die Pflicht zu nehmen, oft mit positiven Effek-
ten beim Einsatz von Open-Source-Werkzeugen. Aber
auch mit den damit verbundenen Mehraufwendungen
bei fehlenden Merkmalen oder kritischen Problemfäl-
len, falls Performanceexperten als Feuerwehr ad hoc in
die Unternehmen kommen müssen. In jedem Fall sind
Kosten zu berücksichtigen, einerseits für die nötigen
Werkzeuge und andererseits für Consulting.
Hinter den Werkzeugen Java Mission Control und
Java Flight Recorder steht ein Entwicklungsteam, das
größtenteils in Stockholm arbeitet und die Werkzeuge
kontinuierlich weiterentwickelt. Die Roadmap sieht
für JMC 6.0 mit JDK 9 eine automatische Analyse der
Flight Recordings vor, und die Benutzeroberfläche soll
modernisiert werden. Außerdem sollen neue Eventtypen
kommen:
• Detaillierte Safe-Point-Informationen
• Detaillierte Code-Cache-Informationen
• Compilerevents mit detaillierten Inlining-Informati-
onen
• Garbage-First-Informationen mit verbesserter Zu-
standsvisualisierung der Memory-Regionen
• Modulevents für geladene Module
• Unterstützung von nativen geladenen Bibliotheken
mit periodischen Events
Zu den Verbesserungen zählen auch neue APIs, die bei
der Verwendung von Custom-Events unterstützen. Der
programmatische Zugriff zum Lesen von Flight Recor-
dings und zur Kontrolle vom Flight Recorder sowie die
Modularisierungsunterstützung mit kleineren Profilen
Abb. 6: „flight_recording_18045Allocator1432.jfr“ zeigt den Sägezahnverlauf, aber ohne Verzerrungen, und der Used Heap hat sich verringert
werden einfacher zu benutzen sein. Zudem wird der
Namespace von oracle.jrockit.* nach jdk.jfr.* geändert.
Letztlich steht der JMC-JFR-Memory-Leak-Detektor un-
ter Vorbehalt auf der Wunschliste für die Roadmap. Die
geplante Auslieferung von JMC 6.0 ist mit der JDK-9-
Releasefreigabe [9] für den 27. Juli 2017 vorgesehen.
Wolfgang Weigend arbeitet als Sen. Leitender Systemberater bei
der Oracle Deutschland B.V. Co. KG. Er beschäftigt sich mit
Java-Technologie und Architektur für unternehmensweite Anwen-
dungsentwicklung.
Links Literatur
[1] Java Mission Control 5.5 Release Notes: http://www.oracle.com/
technetwork/java/javase/jmc55-release-notes-2412446.html
[2] Oracle Java Mission Control 5.5 Certified System Configurations: http://
www.oracle.com/technetwork/java/javaseproducts/documentation/jmc-
5-5-certified-system-config-2432060.html
[3] Java Components: https://docs.oracle.com/javacomponents/index.html
[4] Oracle Java SE and Oracle Java Embedded Products: http://www.oracle.
com/technetwork/java/javase/terms/products/index.html
[5] Oracle Binary Code License Agreement for the Java SE Platform Products
and JavaFX: http://www.oracle.com/technetwork/java/javase/terms/
license/index.html
[6] Java Platform, Standard Edition Java Flight Recorder Runtime Guide:
https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/
toc.htm
[7] JMC Tutorial: http://hirt.se/downloads/oracle/jmc_tutorial.zip
[8] Blog von Marcus Hirt: http://hirt.se/blog/
[9] JDK 9: http://openjdk.java.net/projects/jdk9/
11. www.entwickler.de
Java-Magazin-Abonnement abschließen auf www.entwickler.de
Jetzt abonnieren und
3 TOP-VORTEILE sichern!
Im entwickler.kiosk immer
und überall online lesen –
am Desktop und mobil
Mit vergünstigtem Upgrade
auf das gesamte Angebot
im entwickler.kiosk
zugreifen
Alle Printausgaben
frei Haus erhalten