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/
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
JAX 2017, Mainz: Vortrag von Josef Fuchshuber (@fuchshuber, Cheftechnologe bei QAware) und Tobias Placht (@knacht, Software Ingenieur bei QAware).
Abstract: Wie oft kannst du ein neues Feature releasen? Jede Woche? Jeden Tag? Jede Stunde? Continuous Delivery ist einer der wesentlichen Treiber, warum wir Cloud-native Anwendung bauen. Für Software-driven Organisationen ist das der Schlüssel für eine sicherere, stabilere Software bei minimiertem Risiko und kurzen Feedbackschleifen. Die Herausforderung dabei ist, aus jeder Codeänderung möglichst schnell eine lauffähige und gründlich getestete Software zu machen. Das ist für viele Firmen ein wesentlicher Wettbewerbsvorteil. Wir zeigen in diesem Vortrag eine Werkzeugkette, mit der Continuous Delivery nicht nur für Cloud-native Anwendungen, sondern auch auf Cloud-nativer Infrastruktur möglich ist. Ganz im Gedanken von „Everything is Code“ betrachten wir dabei nicht nur das Bauen und Testen von Software, sondern auch die Automatisierung der Infrastrukturbereitstellung, der Deployments und Roll-outs. Dabei treffen alte Bekannte (z.B. Jenkins, SonarQube) auf Cloud-Computing-Technologien wie z.B. Docker für Betriebssystemvirtualisierung und DC/OS für das Clustermanagement.
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
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/
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
JAX 2017, Mainz: Vortrag von Josef Fuchshuber (@fuchshuber, Cheftechnologe bei QAware) und Tobias Placht (@knacht, Software Ingenieur bei QAware).
Abstract: Wie oft kannst du ein neues Feature releasen? Jede Woche? Jeden Tag? Jede Stunde? Continuous Delivery ist einer der wesentlichen Treiber, warum wir Cloud-native Anwendung bauen. Für Software-driven Organisationen ist das der Schlüssel für eine sicherere, stabilere Software bei minimiertem Risiko und kurzen Feedbackschleifen. Die Herausforderung dabei ist, aus jeder Codeänderung möglichst schnell eine lauffähige und gründlich getestete Software zu machen. Das ist für viele Firmen ein wesentlicher Wettbewerbsvorteil. Wir zeigen in diesem Vortrag eine Werkzeugkette, mit der Continuous Delivery nicht nur für Cloud-native Anwendungen, sondern auch auf Cloud-nativer Infrastruktur möglich ist. Ganz im Gedanken von „Everything is Code“ betrachten wir dabei nicht nur das Bauen und Testen von Software, sondern auch die Automatisierung der Infrastrukturbereitstellung, der Deployments und Roll-outs. Dabei treffen alte Bekannte (z.B. Jenkins, SonarQube) auf Cloud-Computing-Technologien wie z.B. Docker für Betriebssystemvirtualisierung und DC/OS für das Clustermanagement.
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
In loser Folge werden Tipps und Tricks aus allen Bereichen der Programmierung in Lotus Notes/Domino vorgestellt. @Formula, LotusScript, XPages, LS2CApi.
Wie konfiguriere ich den Domino Designer?
Welche kostenlosen Tools können mir meine Arbeit erleichtern?
Warum ist es wichtig, richtig zu "dimmen"?
Richtext kann mit LotusScript im Backend nicht in Richtext eingefügt werden. Oder etwa doch? @Transform / @Sort. Was kann man denn damit machen?
8.5.3, was gibt es Neues im Bereich @Formula / LotusScript.
Zielgruppe sind alle, die sich mit Applikationsentwicklung beschäftigen. Anfänger und "alte Hasen"; es ist für jeden etwas dabei.
Kenntnisse: Grundlagen der Entwicklung in Lotus Notes/Domino
Während das Gros der Storage-Hersteller in IIoT/IoT noch den nächsten großen Storage-Hype sehen, zeigt uns die Analytics-Welt andere wegweisende Trends in der Verarbeitung der Daten aus Sensor und Sensorkette auf. So bringt Google beispielsweise mit Coral bereits Neuronale Netze als embedded KI in die Chipsets der Sensoren zum Preis weniger Cent. Wie in der Mathematik gelernt, geht der Trend nun auch hier in Richtung Vereinfachung und Reduktion bereits in den ersten Schritten der Aufgabenstellung. Redundanzen und anderes unnützes Beiwerk braucht weder übertragen oder gar gespeichert werden ...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Nico Orschel
Talk @ Microsoft Testing Infoday, Hamburg
Agenda:
- Test management and execution with TFS WebAccess
- CodedUI test automation
- News from the product group
Konzepte, Werkzeuge und Ideen aus der Praxis für bessere und erfolgreichere .NET-Softwareprojekte:
Klassen/Objekte/Komponenten, Mehrschichtige .NET-Anwendungen, Bibliotheken und Pattern, Frameworks und Tools, Unit Testing und Codeanalyse, Continous Integration und Versionsverwaltung, Dokumentation und Instrumentation
Dataservices - Data Processing mit MicroservicesQAware GmbH
IT-Tage 2018, Frankfurt: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware)
=== Dokument bitte herunterladen für bessere Lesbarkeit! ===
Abstract: Data Processing und Microservices sind ein perfektes Gespann. In dieser Kombination können Microservices dazu verwendet werden, ein flexibles, Event-getriebenes und skalierbares System von lose gekoppelten Datenverarbeitungsaufgaben aufzubauen. Diesen Ansatz nennen wir Dataservices.
In diesem Vortrag stellen wir zunächst die wesentlichen Konzepte und einige Schlüsseltechnologien vor, um Dataservice-Architekturen zu realisieren. Anschließend werden wir die einzelnen Bestandteile einer exemplarischen Datenverarbeitungs-Pipeline schrittweise komponieren und die Showcase-Pipeline in der Cloud zur Ausführung bringen und skalieren.
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
Das Dokumentieren einer API wird oft als mühsame, aber wesentliche Aufgabe angesehen. Mit OpenAPI / Swagger können wir eine API-Dokumentation angenehm einfach in ASP.NET Core integrieren. Gregor Biswanger zeigt, wie eine API-Dokumentation mit einer Benutzeroberfläche hinzugefügt wird, mit der wir die API testen können.
Als Nächstes erfahren wir, wie wir Attribute und Konventionen verwenden, um die generierte OpenAPI-Spezifikation zu verbessern. Abschließend wird gezeigt, wie wir mit der Authentifizierung, Versionierung und Anpassung der Benutzeroberfläche umgehen.
Die von CADFEM und dem Ingenieurbüro Huß & Feickert (ihf) entwickelte CADFEM ihf Toolbox vereinfacht die tägliche Berechnungsarbeit mit ANSYS® und ANSYS® Workbench™. In die Toolbox sind nun unter anderem auch der richtlinienkonforme Festigkeitsnachweis nach FKM (WB/FKM), die Körperschallbewertung schwingender Strukturen (SBSound), die Modellordnungsreduktion zur Einbindung von 3D-FEM-Modellen in die Systemsimulation (MOR4ANSYS), sowie die CADFEM IDAC Materialdatenbank integriert.
CADFEM ihf Toolbox from CADFEM Austria GmbH
Der in ANSYS Workbenc h integrierte richtlinienkonforme Festigkeitsnachweis nach FKM (WB/FKM) wurde vom ihf gemeinsam mit CADFEM entwickelt. Die FKM-Richtlinie “Rechnerischer Festigkeitsnachweis für Maschinenbauteile” beschreibt einen statischen Festigkeitsnachweis und einen zykli schen Betriebs- bzw. Dauerfestigkeitsnachweis. WB/FKM erleichtert Ihnen die Bewertung einer FEM-Analyse, indem ein vollflächiger Festigkeitsnachweis nach FKM-Richtlinie für das Rechenmodell durchgeführt wird. Durch die vollständige Integration in ANSYS Workbench wird eine schnelle und einfache Definition der Nachweisparameter ermöglicht. Der vollflächige Nachweis garantiert ein sicheres Auffinden von kritisch beanspruchten Stellen, wobei die Visualisierung des Auslastungsgrades die Ergebnisinterpretation unterstützt.
Mit SBSOUND wird der Körperschall berechnet, so wie er in der einschlägigen Literatur zur Maschinenakustik beschrieben wird. Dies geschieht auf Basis der Ergebnisse der vorab durchgeführten Frequenzganganalyse mit modaler Superposition in ANSYS.
MOR4ANSYS schließt die Lücke zwischen hoch dimensionierten FE- und kompakten System-Modellen. Damit können Sie als Entwickler strukturmechanische ANSYS-Modelle mit Verhaltensmodellen verknüpfen und eine Gesamtsimulation vornehmen, die auch die Eigenschaften einzelner Schaltungskomponenten einschließt.
Die CADFEM IDAC Materialdatenbank beinhaltet neben statischen Materialkennwerten verschiedenster Werkstoffe (z.B. den E-Modul, die Dichte, die Zugfestigkeit, die Streckgrenze, etc.) auch die für eine Betriebsfestigkeitsrechnung notwendigen zyklischen Kennwerte (z.B. Nennspannungswöhlerlinien oder Exponenten/Koeffizienten für Verfestigungen, zyklische Dehnungen oder zyklische Spannungen).
Die Funktionalitäten der CADFEM ihf Toolbox werden als Source-Code Musterlösungen ausgeliefert -- passen Sie die Toolbox also an Ihre individuellen Bedürfnisse an und erhöhen Sie Ihren Nutzen zusätzlich!
Unterstützung bieten wir bei entsprechenden Webinaren bzw. Einführungsseminaren. Darüber hinausgehende Beratung zur Anwendung oder Weiterentwicklung bieten wir gerne in Form von an.
Die CADFEM ihf Toolbox ist als Gesamtpaket erhältlich und wird Schritt für Schritt um neue Werkzeuge erweitert.
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Mayflower GmbH
English speaking readers: please click on http://www.slideshare.net/mayflowergmbh/magento-oxid-xtcommerce-evaluation-guide-for-enterprises
Vortrag auf der E-Commerce Conference 2009 in Düsseldorf und Hamburg. Vergleich dreier populärer commercial OS Shopsysteme auf PHP Basis. Welche Kriterien sind für große Unternehmenskunden wichtig im Rahmen einer Evaluation? Der Vortrag beleuchtet u.a. Hintergründe der Herstellerfirmen, Entwicklungskriterien, Community, Performance und Dokumentation.
Die wachsende Komplexität von Geschäfts- und Internetanwendungen und gestiegenen Erwartungen an die Agilität der Entwicklung verlangen einen neuen, effizienteren Ansatz zur Systementwicklung im Team.
Automatisierung in hochskalierenden Umgebungen werden vom üblichen Push-Deployment-Ansatz ausgebremst.
Das z2-Environment addressiert beide Problembereiche.
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
AndroMDA ist ein freiverfügbarer erweiterbarer Generatorbaukasten in Anlehnung an die Spezifikationen zur Model Driven Architecture (MDA) der Object Management Group (OMG). Aus UML-Modellen wird Code für beliebige Zielplattformen erzeugt. Anders als andere MDA-Toolkits bringt AndroMDA fertige Cartridges für aktuelle Entwicklungsplattformen wie Struts, JSF, Spring, Hibernate, EJB und jBPM mit. Weiterhin besteht zusätzlich die Möglichkeit zur Erstellung eigener Cartridges.
Nach einer kurzen Einführung in MDA gibt der Vortrag einen Überblick über AndroMDA und erläutert die Architektur und Grundprinzipien. Die Möglichkeiten des Toolkits werden anhand einer Web-Anwendung für Pizza-Bestellungen erklärt. Anschließend besteht die Möglichkeit zur Diskussion und zum Erfahrungsaustausch aus Projekten.
Vortrag bei der JUG CH in Luzern. den größten Teil des Votrages hat allerdings die Live-Demo ausgemacht in der ein Prozessbeispiel von der Pike auf neu entwickelt habe. Wer das verpasst hat am besten den Getting Started Guide durchackern: http://camunda.org/get-started/developing-process-applications.html
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
Slides to our (Dennis Schulte and me) talk at the German Java conference W-JAX 2013 in Munich. Subject is the batch processing framework Spring Batch, general hints regarding performance in batch applications and scalability options in Spring Batch. Slides are in German.
Warum es Sinn macht aus Hardware Software zu machen
Virtualisierung ist in der IT Welt nicht mehr wegzudenken. Jeder ist auch ohne es zu wissen schon in Kontakt mit ihnen gekommen.
Der Vortrag soll die Vorteile und Techniken der Virtualisierung von Server betrachten und einen kurzen Überblick über kostenfreie und kostenpflichtige Anbieter verschaffen.
OSMC 2010 | Verteiltes Monitoring by Martin HefterNETWAYS
Wird eine Nagios Installation zu groß oder verhindert die Netzwerk-Topologie den Zugriff auf bestimmte Komponenten, wird es erforderlich, weitere Nagios-Instanzen einzusetzen. Um nun nicht mehrere Instanzen beobachten zu müssen, gibt es in Nagios die Möglichkeit, die Ergebnisse der Servicechecks über eine Schnittstelle an eine zentrale Instanz weiterzuleiten. Dieser Workshop soll zeigen, wie man die Konfiguration für eine verteilte Umgebung plant, die Installation durchführt und optimiert.
Microsoft .NET Gadgeteer - Nur Lego für Große oder doch der einfache Weg des
„rapid prototyping“ für Hardwarekomponenten?
In Rekordgeschwindigkeit Hardware programmieren, bauen und das ohne Lötkolben? Mit dem Microsoft .NET Gadgeteer kann man Prototypen von elektronischen Geräten entwickeln, testen und immer wieder neu erfinden und das ganz komfortabel mit dem .NET Micro Framework, C# und Visual Studio als Entwicklungsumgebung.
Mit einer ARM7-Mikroprozessor-Platine bewaffnet, wird Holger Wendel in seinem Vortrag ein paar Beispiele zur Verwendung des Gadgeteer zeigen und dabei unterschiedliche Komponenten wie Taster, LEDs , Ethernet-Schnittstelle, Kartenleser bis hin zu Display und Kamera zum Einsatz bringen.
Was jeder Java-Entwickler über Strings wissen sollteberndmueller
Strings sind wahrscheinlich der am meisten verwendete Datentyp in jeder
Java-Anwendung. Es ist daher nicht überraschend, dass JDK-Ingenieure
versuchen, Strings möglichst gut zu optimieren oder Bücher über
Performanz-Tuning und Testen dem Thema Strings ganze Kapitel widmen.
Jeder Entwickler sollte daher wissen, was Strings sind und wie sie
sinnvoll und effizient eingesetzt werden können.
Dieser Vortrag stellt JDK-Klassen vor, die mit und auf Strings
arbeiten, sowohl auf der API- aber auch auf der
Implementierungsebene. Wir beleuchten internte Strings und die für sie
verwendeten Speicherbereiche, sowie die noch recht unbekannte
"String-Deduplication"-Option des G1-Garbage-Collectors.
In loser Folge werden Tipps und Tricks aus allen Bereichen der Programmierung in Lotus Notes/Domino vorgestellt. @Formula, LotusScript, XPages, LS2CApi.
Wie konfiguriere ich den Domino Designer?
Welche kostenlosen Tools können mir meine Arbeit erleichtern?
Warum ist es wichtig, richtig zu "dimmen"?
Richtext kann mit LotusScript im Backend nicht in Richtext eingefügt werden. Oder etwa doch? @Transform / @Sort. Was kann man denn damit machen?
8.5.3, was gibt es Neues im Bereich @Formula / LotusScript.
Zielgruppe sind alle, die sich mit Applikationsentwicklung beschäftigen. Anfänger und "alte Hasen"; es ist für jeden etwas dabei.
Kenntnisse: Grundlagen der Entwicklung in Lotus Notes/Domino
Während das Gros der Storage-Hersteller in IIoT/IoT noch den nächsten großen Storage-Hype sehen, zeigt uns die Analytics-Welt andere wegweisende Trends in der Verarbeitung der Daten aus Sensor und Sensorkette auf. So bringt Google beispielsweise mit Coral bereits Neuronale Netze als embedded KI in die Chipsets der Sensoren zum Preis weniger Cent. Wie in der Mathematik gelernt, geht der Trend nun auch hier in Richtung Vereinfachung und Reduktion bereits in den ersten Schritten der Aufgabenstellung. Redundanzen und anderes unnützes Beiwerk braucht weder übertragen oder gar gespeichert werden ...
Testmanagement mit Visual Studio 2013 / CodedUI / Neues aus der Produktgruppe...Nico Orschel
Talk @ Microsoft Testing Infoday, Hamburg
Agenda:
- Test management and execution with TFS WebAccess
- CodedUI test automation
- News from the product group
Konzepte, Werkzeuge und Ideen aus der Praxis für bessere und erfolgreichere .NET-Softwareprojekte:
Klassen/Objekte/Komponenten, Mehrschichtige .NET-Anwendungen, Bibliotheken und Pattern, Frameworks und Tools, Unit Testing und Codeanalyse, Continous Integration und Versionsverwaltung, Dokumentation und Instrumentation
Dataservices - Data Processing mit MicroservicesQAware GmbH
IT-Tage 2018, Frankfurt: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware)
=== Dokument bitte herunterladen für bessere Lesbarkeit! ===
Abstract: Data Processing und Microservices sind ein perfektes Gespann. In dieser Kombination können Microservices dazu verwendet werden, ein flexibles, Event-getriebenes und skalierbares System von lose gekoppelten Datenverarbeitungsaufgaben aufzubauen. Diesen Ansatz nennen wir Dataservices.
In diesem Vortrag stellen wir zunächst die wesentlichen Konzepte und einige Schlüsseltechnologien vor, um Dataservice-Architekturen zu realisieren. Anschließend werden wir die einzelnen Bestandteile einer exemplarischen Datenverarbeitungs-Pipeline schrittweise komponieren und die Showcase-Pipeline in der Cloud zur Ausführung bringen und skalieren.
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
Das Dokumentieren einer API wird oft als mühsame, aber wesentliche Aufgabe angesehen. Mit OpenAPI / Swagger können wir eine API-Dokumentation angenehm einfach in ASP.NET Core integrieren. Gregor Biswanger zeigt, wie eine API-Dokumentation mit einer Benutzeroberfläche hinzugefügt wird, mit der wir die API testen können.
Als Nächstes erfahren wir, wie wir Attribute und Konventionen verwenden, um die generierte OpenAPI-Spezifikation zu verbessern. Abschließend wird gezeigt, wie wir mit der Authentifizierung, Versionierung und Anpassung der Benutzeroberfläche umgehen.
Die von CADFEM und dem Ingenieurbüro Huß & Feickert (ihf) entwickelte CADFEM ihf Toolbox vereinfacht die tägliche Berechnungsarbeit mit ANSYS® und ANSYS® Workbench™. In die Toolbox sind nun unter anderem auch der richtlinienkonforme Festigkeitsnachweis nach FKM (WB/FKM), die Körperschallbewertung schwingender Strukturen (SBSound), die Modellordnungsreduktion zur Einbindung von 3D-FEM-Modellen in die Systemsimulation (MOR4ANSYS), sowie die CADFEM IDAC Materialdatenbank integriert.
CADFEM ihf Toolbox from CADFEM Austria GmbH
Der in ANSYS Workbenc h integrierte richtlinienkonforme Festigkeitsnachweis nach FKM (WB/FKM) wurde vom ihf gemeinsam mit CADFEM entwickelt. Die FKM-Richtlinie “Rechnerischer Festigkeitsnachweis für Maschinenbauteile” beschreibt einen statischen Festigkeitsnachweis und einen zykli schen Betriebs- bzw. Dauerfestigkeitsnachweis. WB/FKM erleichtert Ihnen die Bewertung einer FEM-Analyse, indem ein vollflächiger Festigkeitsnachweis nach FKM-Richtlinie für das Rechenmodell durchgeführt wird. Durch die vollständige Integration in ANSYS Workbench wird eine schnelle und einfache Definition der Nachweisparameter ermöglicht. Der vollflächige Nachweis garantiert ein sicheres Auffinden von kritisch beanspruchten Stellen, wobei die Visualisierung des Auslastungsgrades die Ergebnisinterpretation unterstützt.
Mit SBSOUND wird der Körperschall berechnet, so wie er in der einschlägigen Literatur zur Maschinenakustik beschrieben wird. Dies geschieht auf Basis der Ergebnisse der vorab durchgeführten Frequenzganganalyse mit modaler Superposition in ANSYS.
MOR4ANSYS schließt die Lücke zwischen hoch dimensionierten FE- und kompakten System-Modellen. Damit können Sie als Entwickler strukturmechanische ANSYS-Modelle mit Verhaltensmodellen verknüpfen und eine Gesamtsimulation vornehmen, die auch die Eigenschaften einzelner Schaltungskomponenten einschließt.
Die CADFEM IDAC Materialdatenbank beinhaltet neben statischen Materialkennwerten verschiedenster Werkstoffe (z.B. den E-Modul, die Dichte, die Zugfestigkeit, die Streckgrenze, etc.) auch die für eine Betriebsfestigkeitsrechnung notwendigen zyklischen Kennwerte (z.B. Nennspannungswöhlerlinien oder Exponenten/Koeffizienten für Verfestigungen, zyklische Dehnungen oder zyklische Spannungen).
Die Funktionalitäten der CADFEM ihf Toolbox werden als Source-Code Musterlösungen ausgeliefert -- passen Sie die Toolbox also an Ihre individuellen Bedürfnisse an und erhöhen Sie Ihren Nutzen zusätzlich!
Unterstützung bieten wir bei entsprechenden Webinaren bzw. Einführungsseminaren. Darüber hinausgehende Beratung zur Anwendung oder Weiterentwicklung bieten wir gerne in Form von an.
Die CADFEM ihf Toolbox ist als Gesamtpaket erhältlich und wird Schritt für Schritt um neue Werkzeuge erweitert.
Commercial OS Shops - Magento, OXID, xt:commerce. Evaluationskriterien für En...Mayflower GmbH
English speaking readers: please click on http://www.slideshare.net/mayflowergmbh/magento-oxid-xtcommerce-evaluation-guide-for-enterprises
Vortrag auf der E-Commerce Conference 2009 in Düsseldorf und Hamburg. Vergleich dreier populärer commercial OS Shopsysteme auf PHP Basis. Welche Kriterien sind für große Unternehmenskunden wichtig im Rahmen einer Evaluation? Der Vortrag beleuchtet u.a. Hintergründe der Herstellerfirmen, Entwicklungskriterien, Community, Performance und Dokumentation.
Die wachsende Komplexität von Geschäfts- und Internetanwendungen und gestiegenen Erwartungen an die Agilität der Entwicklung verlangen einen neuen, effizienteren Ansatz zur Systementwicklung im Team.
Automatisierung in hochskalierenden Umgebungen werden vom üblichen Push-Deployment-Ansatz ausgebremst.
Das z2-Environment addressiert beide Problembereiche.
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
AndroMDA ist ein freiverfügbarer erweiterbarer Generatorbaukasten in Anlehnung an die Spezifikationen zur Model Driven Architecture (MDA) der Object Management Group (OMG). Aus UML-Modellen wird Code für beliebige Zielplattformen erzeugt. Anders als andere MDA-Toolkits bringt AndroMDA fertige Cartridges für aktuelle Entwicklungsplattformen wie Struts, JSF, Spring, Hibernate, EJB und jBPM mit. Weiterhin besteht zusätzlich die Möglichkeit zur Erstellung eigener Cartridges.
Nach einer kurzen Einführung in MDA gibt der Vortrag einen Überblick über AndroMDA und erläutert die Architektur und Grundprinzipien. Die Möglichkeiten des Toolkits werden anhand einer Web-Anwendung für Pizza-Bestellungen erklärt. Anschließend besteht die Möglichkeit zur Diskussion und zum Erfahrungsaustausch aus Projekten.
Vortrag bei der JUG CH in Luzern. den größten Teil des Votrages hat allerdings die Live-Demo ausgemacht in der ein Prozessbeispiel von der Pike auf neu entwickelt habe. Wer das verpasst hat am besten den Getting Started Guide durchackern: http://camunda.org/get-started/developing-process-applications.html
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
Slides to our (Dennis Schulte and me) talk at the German Java conference W-JAX 2013 in Munich. Subject is the batch processing framework Spring Batch, general hints regarding performance in batch applications and scalability options in Spring Batch. Slides are in German.
Warum es Sinn macht aus Hardware Software zu machen
Virtualisierung ist in der IT Welt nicht mehr wegzudenken. Jeder ist auch ohne es zu wissen schon in Kontakt mit ihnen gekommen.
Der Vortrag soll die Vorteile und Techniken der Virtualisierung von Server betrachten und einen kurzen Überblick über kostenfreie und kostenpflichtige Anbieter verschaffen.
OSMC 2010 | Verteiltes Monitoring by Martin HefterNETWAYS
Wird eine Nagios Installation zu groß oder verhindert die Netzwerk-Topologie den Zugriff auf bestimmte Komponenten, wird es erforderlich, weitere Nagios-Instanzen einzusetzen. Um nun nicht mehrere Instanzen beobachten zu müssen, gibt es in Nagios die Möglichkeit, die Ergebnisse der Servicechecks über eine Schnittstelle an eine zentrale Instanz weiterzuleiten. Dieser Workshop soll zeigen, wie man die Konfiguration für eine verteilte Umgebung plant, die Installation durchführt und optimiert.
Microsoft .NET Gadgeteer - Nur Lego für Große oder doch der einfache Weg des
„rapid prototyping“ für Hardwarekomponenten?
In Rekordgeschwindigkeit Hardware programmieren, bauen und das ohne Lötkolben? Mit dem Microsoft .NET Gadgeteer kann man Prototypen von elektronischen Geräten entwickeln, testen und immer wieder neu erfinden und das ganz komfortabel mit dem .NET Micro Framework, C# und Visual Studio als Entwicklungsumgebung.
Mit einer ARM7-Mikroprozessor-Platine bewaffnet, wird Holger Wendel in seinem Vortrag ein paar Beispiele zur Verwendung des Gadgeteer zeigen und dabei unterschiedliche Komponenten wie Taster, LEDs , Ethernet-Schnittstelle, Kartenleser bis hin zu Display und Kamera zum Einsatz bringen.
Was jeder Java-Entwickler über Strings wissen sollteberndmueller
Strings sind wahrscheinlich der am meisten verwendete Datentyp in jeder
Java-Anwendung. Es ist daher nicht überraschend, dass JDK-Ingenieure
versuchen, Strings möglichst gut zu optimieren oder Bücher über
Performanz-Tuning und Testen dem Thema Strings ganze Kapitel widmen.
Jeder Entwickler sollte daher wissen, was Strings sind und wie sie
sinnvoll und effizient eingesetzt werden können.
Dieser Vortrag stellt JDK-Klassen vor, die mit und auf Strings
arbeiten, sowohl auf der API- aber auch auf der
Implementierungsebene. Wir beleuchten internte Strings und die für sie
verwendeten Speicherbereiche, sowie die noch recht unbekannte
"String-Deduplication"-Option des G1-Garbage-Collectors.
JSF-Anwendungen testen mit
Arquillian Drone und Arquillian WARP
Arquillian ermöglicht "In-Container"-Tests. Will man JSF-Anwendungen
testen, genügt dies nicht, da ja auch Client-seitige Eingaben und Prüfungen
benötigt werden.
Das Arquillian-Projekt Drone verwendet Selenium, um Client-Eingaben
und Prüfungen zu realisieren. Mit den üblichen Arquillian-Möglichkeiten
hat man damit sowohl den Client als auch den Container im Zugriff.
Das Arquillian-Projekt WARP ermöglicht ebenfalls Client- als auch
Server-seitigen Zugriff. Es befindet sich gerade in der Inkubationsphase
als Arquillian-Teilprojekt. Obwohl noch nicht vollständig, erscheint
ein Blick in die aktuellen Möglichkeiten sinnvoll.
Die JSRs 342 (Java EE 7) und 344 (JPA 2.1) definieren Mandantenfähigkeit (multi-tenancy) explizit als eines der Ziele der JSRs. Im Herbst 2012 wurde entschieden, dieses Feature
aus Zeitgründen in die nachfolgenden Spezifikationen zu verschieben.
Muss man deshalb auf Mandantenfähigkeit in der Persistenzschicht verzichten?
Nein! Hibernate, EcliseLink und OpenJPA bieten jeweils proprietäre JPA-Erweiterungen zur Mandantenfähigkeit an, die in diesem Talk vorgestellt werden.
Class Loading ist uns aus dem EE Umfeld ausreichend bekannt - meinen wir.
Dieser Vertrag geht auf die Grundlagen des Class Loading ein und erweitert das W
issen
eines jeden Java-Entwicklers: Wie sieht das Format von Java-Klassen aus? Wie
werden Klassen geladen? Was ist ein Class Loader?
Seit Java 5 steht das Package java.lang.instrument zur
Verfügung, das die Instrumentierung von Klassen zum Ladezeitpunkt erlaubt.
Wir führen in die Möglichkeiten dieses Package ein.
Zum Abschluss zeigen wir, wie bereits geladene Klassen manipuliert werden können
Instrumentierung - Das Werkzeug der Werkzeugmacher - berndmueller
Das Package java.lang.instrument führt das Konzept eines Java-Agenten
ein, der Klassen beim Laden in die VM oder bereits geladenen Klassen
innerhalb der VM ändern kann. Man kann daher mit Standard-Java ohne
zusätzliche Bibliotheken Klassen zur Laufzeit ändern. Die Änderungen
sind beschränkt auf (neue) Methodenrümpfe und Konstanten. Das
Hinzufügen, Löschen oder Umbenennen von Methoden und Variablen
ist nicht erlaubt.
Dieser Vortrag führt die Konzepte der Instrumentierung
ein und zeigt, wie einfach das Ersetzen von Klassen zur
Laufzeit (Hot-Swap) mit Standard-Java ist.
Der Vortrag belegt diese "Einfachheit" durch kleinere Demos. Die
letze Demo zeigt, wie eine JRebel-Light-Variante mit Standard-Java
ohne externe Bibliotheken gebaut werden kann.
Was jeder Java-Entwickler über Strings wissen sollteberndmueller
Strings sind wahrscheinlich der am meisten verwendete Datentyp in jeder
Java-Anwendung. Es ist daher nicht überraschend, dass JDK-Ingenieure
versuchen, Strings möglichst gut zu optimieren oder Bücher über
Performanz-Tuning und Testen dem Thema Strings ganze Kapitel widmen.
Jeder Entwickler sollte daher wissen, was Strings sind und wie sie
sinnvoll und effizient eingesetzt werden können.
Dieser Vortrag stellt JDK-Klassen vor, die mit und auf Strings
arbeiten, sowohl auf der API- aber auch auf der
Implementierungsebene. Wir beleuchten internte Strings und die für sie
verwendeten Speicherbereiche, sowie die noch recht unbekannte
"String-Deduplication"-Option des G1-Garbage-Collectors.
Mit Java 9 ändert sich die interne Repräsentation von Strings.
Wir skizzieren diese Änderungen, die nach außen unsichtbar
bleiben.
4. Compilers Everywhere
Agenda
Was ist Just-in-Time-Compilation ?
Was der JIT-Compiler so alles macht
VM-Schalter zum Selbstausprobieren . . .
Ahead of Time Compilation
Graal
GraalVM
(Demo)
Bernd M¨uller 5.7.2018 3/48
7. Compilers Everywhere
(Java) Compiler Basics
Compilers
A compiler is a program that reads a
program written in one programming
language – the source language – and
translates it into an equvalent program in
another language – the target language.
Bernd M¨uller 5.7.2018 6/48
8. Compilers Everywhere
(Java) Compiler Basics
Compiler (from Wikipedia)
. . .
The translation process influences the design of computer languages which leads to a
preference of compilation or interpretation.
. . .
In practice, an interpreter can be implemented for compiled languages and compilers
can be implemented for interpreted languages.
. . .
https://en.wikipedia.org/wiki/Compiler
Bernd M¨uller 5.7.2018 7/48
9. Compilers Everywhere
(Java) Compiler Basics
Compiler (from Wikipedia)
. . .
The translation process influences the design of computer languages which leads to a
preference of compilation or interpretation.
. . .
In practice, an interpreter can be implemented for compiled languages and compilers
can be implemented for interpreted languages.
. . .
https://en.wikipedia.org/wiki/Compiler
Bernd M¨uller 5.7.2018 7/48
10. Compilers Everywhere
(Java) Compiler Basics
The Java Language: A White Paper / An Overview, 1995
Section Interpreted
The Java interpreter can execute Java bytecodes directly on any machine to which the
interpreter has been ported. And since linking is a more incremental and lightweight
process, the development process can be much more rapid and exploratory.
Bernd M¨uller 5.7.2018 8/48
11. Compilers Everywhere
(Java) Compiler Basics
The Java Language: A White Paper / An Overview, 1995
Section High Performance
While the performance of interpreted bytecodes is usually more than adequate, there
are situations where higher performance is required. The bytecodes can be translated
on the fly (at runtime) into machine code for the particular CPU the application is
running on. For those accustomed to the normal design of a compiler and dynamic
loader, this is somewhat like putting the final machine code generator in the dynamic
loader. The bytecode format was designed with generating machine codes in mind, so
the actual process of generating machine code is generally simple.
In interpreted code we’re getting about 300,000 method calls per second on an Sun
Microsystems SPARCStation 10. The performance of bytecodes converted to machine
code is almost indistinguishable from native C or C++.
Bernd M¨uller 5.7.2018 9/48
12. Compilers Everywhere
(Java) Compiler Basics
The Java Language: A White Paper / An Overview, 1995
Section High Performance
While the performance of interpreted bytecodes is usually more than adequate, there
are situations where higher performance is required. The bytecodes can be translated
on the fly (at runtime) into machine code for the particular CPU the application is
running on. For those accustomed to the normal design of a compiler and dynamic
loader, this is somewhat like putting the final machine code generator in the dynamic
loader. The bytecode format was designed with generating machine codes in mind, so
the actual process of generating machine code is generally simple.
In interpreted code we’re getting about 300,000 method calls per second on an Sun
Microsystems SPARCStation 10. The performance of bytecodes converted to machine
code is almost indistinguishable from native C or C++.
Bernd M¨uller 5.7.2018 9/48
13. HotSpot-Ank¨undigung 1999
PARIS–(BUSINESS WIRE)–April 27, 1999
Sun Microsystems, Inc. today announced the release of the Java HotSpot(TM)
Performance Engine, the fastest software to date for Java(TM) technology
performance. The Java HotSpot performance engine breaks new ground in software
design and raises the bar by providing 100% higher performance than the previous Java
platform. The Java HotSpot Performance Engine will be available free of charge for
download at http://java.sun.com/products/hotspot/index.html.
”Java HotSpot Performance Engine turbocharges the Java 2 platform – performance is
no longer an issue,” said Jon Kannegaard, Vice President and General Manager, Java
Platform at Sun Microsystems, Inc.’s Java Software. This release maintains
uncompromising compatibility while dramatically boosting speed. It’s now the obvious
choice for deploying full-scale Java applications in the enterprise.”
URL
14. HotSpot-Ank¨undigung 1999
PARIS–(BUSINESS WIRE)–April 27, 1999
Sun Microsystems, Inc. today announced the release of the Java HotSpot(TM)
Performance Engine, the fastest software to date for Java(TM) technology
performance. The Java HotSpot performance engine breaks new ground in software
design and raises the bar by providing 100% higher performance than the previous Java
platform. The Java HotSpot Performance Engine will be available free of charge for
download at http://java.sun.com/products/hotspot/index.html.
”Java HotSpot Performance Engine turbocharges the Java 2 platform – performance is
no longer an issue,” said Jon Kannegaard, Vice President and General Manager, Java
Platform at Sun Microsystems, Inc.’s Java Software. This release maintains
uncompromising compatibility while dramatically boosting speed. It’s now the obvious
choice for deploying full-scale Java applications in the enterprise.”
URL
18. Compilers Everywhere
Just-in-Time-Compilation
Hot-Spot-Compilation oder JIT-Compilation
Idee: Performanz h¨angt haupts¨achlich davon ab, wie schnell h¨aufig ausgef¨uhrter
Code ist
Daher: sp¨ate (nicht zum Programmstart), optionale Compilierung sinnvoll
Compilierung ben¨otigt Zeit, diese evtl vergeudet, falls Code selten aufgerufen
Bernd M¨uller 5.7.2018 12/48
19. Compilers Everywhere
Just-in-Time-Compilation
Hot-Spot-Compilation oder JIT-Compilation
Idee: Performanz h¨angt haupts¨achlich davon ab, wie schnell h¨aufig ausgef¨uhrter
Code ist
Daher: sp¨ate (nicht zum Programmstart), optionale Compilierung sinnvoll
Compilierung ben¨otigt Zeit, diese evtl vergeudet, falls Code selten aufgerufen
JVM ben¨otigt Informationen ¨uber Ausf¨uhrung, um optimalen Code zu erzeugen
Bernd M¨uller 5.7.2018 12/48
20. Compilers Everywhere
Just-in-Time-Compilation
Hot-Spot-Compilation oder JIT-Compilation
Idee: Performanz h¨angt haupts¨achlich davon ab, wie schnell h¨aufig ausgef¨uhrter
Code ist
Daher: sp¨ate (nicht zum Programmstart), optionale Compilierung sinnvoll
Compilierung ben¨otigt Zeit, diese evtl vergeudet, falls Code selten aufgerufen
JVM ben¨otigt Informationen ¨uber Ausf¨uhrung, um optimalen Code zu erzeugen
Beispiel: obj1.equals(obj2)
Bernd M¨uller 5.7.2018 12/48
21. Compilers Everywhere
Just-in-Time-Compilation
Hot-Spot-Compilation oder JIT-Compilation
Idee: Performanz h¨angt haupts¨achlich davon ab, wie schnell h¨aufig ausgef¨uhrter
Code ist
Daher: sp¨ate (nicht zum Programmstart), optionale Compilierung sinnvoll
Compilierung ben¨otigt Zeit, diese evtl vergeudet, falls Code selten aufgerufen
JVM ben¨otigt Informationen ¨uber Ausf¨uhrung, um optimalen Code zu erzeugen
Beispiel: obj1.equals(obj2)
Falls obj1 die letzen Male immer String war, String.equals() verwenden und
nicht dynamisch dispatchen
Bernd M¨uller 5.7.2018 12/48
22. Compilers Everywhere
Just-in-Time-Compilation
Hot-Spot-Compilation oder JIT-Compilation
Idee: Performanz h¨angt haupts¨achlich davon ab, wie schnell h¨aufig ausgef¨uhrter
Code ist
Daher: sp¨ate (nicht zum Programmstart), optionale Compilierung sinnvoll
Compilierung ben¨otigt Zeit, diese evtl vergeudet, falls Code selten aufgerufen
JVM ben¨otigt Informationen ¨uber Ausf¨uhrung, um optimalen Code zu erzeugen
Beispiel: obj1.equals(obj2)
Falls obj1 die letzen Male immer String war, String.equals() verwenden und
nicht dynamisch dispatchen
Aber: obj1 k¨onnte mal von anderem Typ sein, muss also beobachtet werden
Bernd M¨uller 5.7.2018 12/48
24. Compilers Everywhere
Just-in-Time-Compilation
Die beiden JIT-Compiler
Client-Compiler, auch C1 genannt
Server-Compiler, auch C2 genannt
Warum zwei ?
Client-Compiler optimiert, um Start-Up-Zeit zu minimieren
Server-Compiler optimiert, um auf lange Sicht bessere Performanz zu haben
Bernd M¨uller 5.7.2018 13/48
25. Compilers Everywhere
Just-in-Time-Compilation
Die beiden JIT-Compiler
Client-Compiler, auch C1 genannt
Server-Compiler, auch C2 genannt
Warum zwei ?
Client-Compiler optimiert, um Start-Up-Zeit zu minimieren
Server-Compiler optimiert, um auf lange Sicht bessere Performanz zu haben
Warum kann der Server-Compiler evtl. besser sein?
Bernd M¨uller 5.7.2018 13/48
26. Compilers Everywhere
Just-in-Time-Compilation
Die beiden JIT-Compiler
Client-Compiler, auch C1 genannt
Server-Compiler, auch C2 genannt
Warum zwei ?
Client-Compiler optimiert, um Start-Up-Zeit zu minimieren
Server-Compiler optimiert, um auf lange Sicht bessere Performanz zu haben
Warum kann der Server-Compiler evtl. besser sein?
Weil er den ausgef¨uhrten Code l¨anger beobachtet und gr¨undlicher analysiert hat und
damit gezieltere Optimierungen einbauen kann
Bernd M¨uller 5.7.2018 13/48
29. Compilers Everywhere
Tiered Compilation
Tiered Compilation
Zu Beginn Client-Compiler verwenden, um schnellen Startup zu bekommen
Wenn Code
”
hot“ wird und gen¨ugend Laufzeitinformationen gesammelt wurden,
nochmals durch Server-Compiler ¨ubersetzen
Bernd M¨uller 5.7.2018 15/48
30. Compilers Everywhere
Tiered Compilation
Tiered Compilation
Zu Beginn Client-Compiler verwenden, um schnellen Startup zu bekommen
Wenn Code
”
hot“ wird und gen¨ugend Laufzeitinformationen gesammelt wurden,
nochmals durch Server-Compiler ¨ubersetzen
Zu setzen mit -XX:+TieredCompilation
Bernd M¨uller 5.7.2018 15/48
31. Compilers Everywhere
Tiered Compilation
Tiered Compilation
Zu Beginn Client-Compiler verwenden, um schnellen Startup zu bekommen
Wenn Code
”
hot“ wird und gen¨ugend Laufzeitinformationen gesammelt wurden,
nochmals durch Server-Compiler ¨ubersetzen
Zu setzen mit -XX:+TieredCompilation
Seit Java 8 der Default
Bernd M¨uller 5.7.2018 15/48
32. Compilers Everywhere
Tiered Compilation
Tiered Compilation
Zu Beginn Client-Compiler verwenden, um schnellen Startup zu bekommen
Wenn Code
”
hot“ wird und gen¨ugend Laufzeitinformationen gesammelt wurden,
nochmals durch Server-Compiler ¨ubersetzen
Zu setzen mit -XX:+TieredCompilation
Seit Java 8 der Default
Tiered Compilation setzt Server-Compiler voraus.
java -client -XX:+TieredCompilation l¨auft daher ohne Tiered Compilation
Bernd M¨uller 5.7.2018 15/48
41. Compilers Everywhere
Compilation Thresholds
Compilation Thresholds
Was ist h¨aufig ausgef¨uhrter Code?
Zwei Z¨ahler
Anzahl Aufrufe einer Methode
Anzahl R¨uckspr¨unge innerhalb einer Schleife
Setzen mit -XX:CompileThreshold=N
Setzen mit -XX:BackEdgeThreshold=N
Defaults in Client-Compiler: 1500 in Server-Compiler 10000
In der Regel selten bis nie zu ¨ander laut [Oaks], da mit diesen Werten Info f¨ur
optimale Compilierung vorhanden
Bernd M¨uller 5.7.2018 18/48
47. Compilers Everywhere
On-Stack Replacement
On-Stack Replacement
Was tun, wenn eine Methode eine Schleife enth¨alt, die sehr lange l¨auft?
Oder eine Schleife, die nie terminiert?
Bernd M¨uller 5.7.2018 23/48
48. Compilers Everywhere
On-Stack Replacement
On-Stack Replacement
Was tun, wenn eine Methode eine Schleife enth¨alt, die sehr lange l¨auft?
Oder eine Schleife, die nie terminiert?
Dann muss Schleife ¨ubersetzt werden, ohne auf den Methodenaufruf warten zu
k¨onnen
Bernd M¨uller 5.7.2018 23/48
49. Compilers Everywhere
On-Stack Replacement
On-Stack Replacement
Was tun, wenn eine Methode eine Schleife enth¨alt, die sehr lange l¨auft?
Oder eine Schleife, die nie terminiert?
Dann muss Schleife ¨ubersetzt werden, ohne auf den Methodenaufruf warten zu
k¨onnen
Wenn Back-EdgeThreshold erreicht, Compilation anstoßen
Bernd M¨uller 5.7.2018 23/48
50. Compilers Everywhere
On-Stack Replacement
On-Stack Replacement
Was tun, wenn eine Methode eine Schleife enth¨alt, die sehr lange l¨auft?
Oder eine Schleife, die nie terminiert?
Dann muss Schleife ¨ubersetzt werden, ohne auf den Methodenaufruf warten zu
k¨onnen
Wenn Back-EdgeThreshold erreicht, Compilation anstoßen
Und compilierte Version anstoßen, solange Schleife noch l¨auft
Bernd M¨uller 5.7.2018 23/48
53. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Bernd M¨uller 5.7.2018 25/48
54. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Man sagt:
”
the object does not escape“
Bernd M¨uller 5.7.2018 25/48
55. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Man sagt:
”
the object does not escape“
M¨ogliche Optimierungen:
Bernd M¨uller 5.7.2018 25/48
56. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Man sagt:
”
the object does not escape“
M¨ogliche Optimierungen:
Automatic Stack Allocation, damit kein GC n¨otig
Bernd M¨uller 5.7.2018 25/48
57. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Man sagt:
”
the object does not escape“
M¨ogliche Optimierungen:
Automatic Stack Allocation, damit kein GC n¨otig
Scalar Replacement, Fields auf Stack oder CPU-Register
Bernd M¨uller 5.7.2018 25/48
58. Compilers Everywhere
Escape Analysis
Escape Analysis
Jeder Heap-Zugriff erfolgt ¨uber Field-Name oder (Array-)Index
Wenn Objekt in Methode erzeugt und nur dort verwendet wird, kann optimiert
werden
Man sagt:
”
the object does not escape“
M¨ogliche Optimierungen:
Automatic Stack Allocation, damit kein GC n¨otig
Scalar Replacement, Fields auf Stack oder CPU-Register
Switch -XX:+DoEscapeAnalysis, Default seit 7u4
Bernd M¨uller 5.7.2018 25/48
62. Compilers Everywhere
Deoptimization
Deoptimization
Manche (einige/viele) Optimierungen m¨ussen r¨uckg¨angig gemacht werden
Z.B. Unterklasse wird geladen, kann Methode ¨uberschreiben
N¨achste Tier hat compiliert (C2 muss C1-Code ersetzen)
Ausgaben im Log:
made not entrant
made zombie
Bernd M¨uller 5.7.2018 27/48
72. Compilers Everywhere
Ahead of Time Compilation
JEP 295: Ahead-of-Time Compilation
JEP 295: Ahead-of-Time Compilation
Bernd M¨uller 5.7.2018 37/48
73. Compilers Everywhere
Ahead of Time Compilation
JEP 295: Ahead-of-Time Compilation
JEP 295: Ahead-of-Time Compilation
Summary Compile Java classes to native code prior to launching the virtual
machine.
Bernd M¨uller 5.7.2018 37/48
74. Compilers Everywhere
Ahead of Time Compilation
Ahead-of-Time Compilation: so gehts!
Neuer Compiler jaotc ab JDK 9 (nur Linux)
Ab JDK 10 auch in Windows
Verwendung:
jaotc --output libWaste.so de.pdbm.Waste1
jaotc --output libjava.base.so --module java.base
java -XX:AOTLibrary=./libWaste.so,./libjava.base.so de.pdbm.Waste1
Bernd M¨uller 5.7.2018 38/48
75. Compilers Everywhere
Ahead of Time Compilation
Ahead-of-Time Compilation: so gehts!
Neuer Compiler jaotc ab JDK 9 (nur Linux)
Ab JDK 10 auch in Windows
Verwendung:
jaotc --output libWaste.so de.pdbm.Waste1
jaotc --output libjava.base.so --module java.base
java -XX:AOTLibrary=./libWaste.so,./libjava.base.so de.pdbm.Waste1
Compilieren des Basismoduls: 2+ Minuten, 323 MB
Bernd M¨uller 5.7.2018 38/48
77. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Java Virtual Machine Compiler Interface (JVM CI)
JEP 243: Java-Level JVM Compiler Interface
Summary Develop a Java based JVM compiler interface (JVMCI) enabling a
compiler written in Java to be used by the JVM as a dynamic compiler.
Bernd M¨uller 5.7.2018 40/48
78. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Java Virtual Machine Compiler Interface (JVM CI)
JEP 243: Java-Level JVM Compiler Interface
Summary Develop a Java based JVM compiler interface (JVMCI) enabling a
compiler written in Java to be used by the JVM as a dynamic compiler.
Umgangssprachlich: Schreib deinen eigenen Compiler und
”
plug it in“
Bernd M¨uller 5.7.2018 40/48
79. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Bernd M¨uller 5.7.2018 41/48
80. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Bernd M¨uller 5.7.2018 41/48
81. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Neuer Compiler Graal in Java geschrieben
Bernd M¨uller 5.7.2018 41/48
82. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Neuer Compiler Graal in Java geschrieben
JEP 317: Experimental Java-Based JIT Compiler
Bernd M¨uller 5.7.2018 41/48
83. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Neuer Compiler Graal in Java geschrieben
JEP 317: Experimental Java-Based JIT Compiler
Integriert ¨uber allgemeines Java Virtual Machine Compiler Interface (JVM CI)
Bernd M¨uller 5.7.2018 41/48
84. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Neuer Compiler Graal in Java geschrieben
JEP 317: Experimental Java-Based JIT Compiler
Integriert ¨uber allgemeines Java Virtual Machine Compiler Interface (JVM CI)
AOT bereits mit Graal realisiert, also in JDK 9 Linux enthalten
Bernd M¨uller 5.7.2018 41/48
85. Compilers Everywhere
Graal und Java Virtual Machine Compiler Interface (JVM CI)
Graal
C1 und C2 in JVM enthalten und in C++ geschrieben,
Einarbeitungs- und Wartungsaufwand Albtraum
Neuer Compiler Graal in Java geschrieben
JEP 317: Experimental Java-Based JIT Compiler
Integriert ¨uber allgemeines Java Virtual Machine Compiler Interface (JVM CI)
AOT bereits mit Graal realisiert, also in JDK 9 Linux enthalten
Ab JDK 10 offiziell (experimental) verwendbar:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
Bernd M¨uller 5.7.2018 41/48
87. Compilers Everywhere
GraalVM
GraalVM
https://www.graalvm.org/: GraalVM is a universal virtual machine for running
applications written in JavaScript, Python, Ruby, R, JVM-based languages like
Java, Scala, Kotlin, and LLVM-based languages such as C and C++.
Bernd M¨uller 5.7.2018 43/48
88. Compilers Everywhere
GraalVM
GraalVM
https://www.graalvm.org/: GraalVM is a universal virtual machine for running
applications written in JavaScript, Python, Ruby, R, JVM-based languages like
Java, Scala, Kotlin, and LLVM-based languages such as C and C++.
Modifizierte/erweiterte JVM mit Truffle und Substrate VM
Bernd M¨uller 5.7.2018 43/48
89. Compilers Everywhere
GraalVM
GraalVM
https://www.graalvm.org/: GraalVM is a universal virtual machine for running
applications written in JavaScript, Python, Ruby, R, JVM-based languages like
Java, Scala, Kotlin, and LLVM-based languages such as C and C++.
Modifizierte/erweiterte JVM mit Truffle und Substrate VM
Enth¨alt native-image: generate an image that contains ahead-of-time compiled
Java code
Bernd M¨uller 5.7.2018 43/48
90. Compilers Everywhere
GraalVM
GraalVM
https://www.graalvm.org/: GraalVM is a universal virtual machine for running
applications written in JavaScript, Python, Ruby, R, JVM-based languages like
Java, Scala, Kotlin, and LLVM-based languages such as C and C++.
Modifizierte/erweiterte JVM mit Truffle und Substrate VM
Enth¨alt native-image: generate an image that contains ahead-of-time compiled
Java code
Zu beachten:
Reflection (Graal SDK unterst¨utzt)
sun.misc.Unsafe: Field-Offsets m¨ussen im Image neu berechnet werden
Nicht vollst¨andiger Classpath: AOT muss alle referenzierten Klassen eager laden, um
¨ubersetzen zu k¨onnen. Ohne AOT kann Programm laufen, wirft aber evtl. Exception.
Kann mit Option --report-unsupported-elements-at-runtime verhindert
werden
Bernd M¨uller 5.7.2018 43/48
92. Compilers Everywhere
GraalVM
Es geht immer weiter . . .
Zum Abschluss die gute Nachricht — es geht immer weiter ;-)
JEP draft: JWarmup precompile java hot methods at application startup (5/2018)
Bernd M¨uller 5.7.2018 45/48
93. Compilers Everywhere
GraalVM
Es geht immer weiter . . .
Zum Abschluss die gute Nachricht — es geht immer weiter ;-)
JEP draft: JWarmup precompile java hot methods at application startup (5/2018)
Kurzgefasst:
Vor Produktion Testlauf, der Daten sammelt und speichert
Diese beim richtigen Lauf sofort f¨ur JIT nutzen
Produktion l¨auft dann mit nativem Code von Anfang an
Bernd M¨uller 5.7.2018 45/48
94. Compilers Everywhere
Und was nutzt mir das jetzt alles ?
Und was n¨utzt mir das jetzt alles ?
Seeing is believing . . . Demo Time !
Shell-Script zur Diagrammerzeugung:
Bernd M¨uller 5.7.2018 46/48
96. Compilers Everywhere
Fragen und Anmerkungen
Referenzen
[Oaks] Scott Oaks, Java Performance — The Definitive Guide. O’Reilly, 2014.
Und Google ;-)
Bernd M¨uller 5.7.2018 48/48