Das Java Memory Model: Überblick und Ausblick auf Java 9
By Vadym Kazulkin and Rodion Alukhanov
()
About this ebook
Related to Das Java Memory Model
Titles in the series (100)
Erfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsNutzeraspekte in Suchmaschinen: Komponenten für eine gelungene Usability-Gestaltung Rating: 0 out of 5 stars0 ratingsVaadin mit Eclipse, Clojure und OSGi Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsF#: Ein praktischer Einstieg Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5Java EE Security Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsQualitätssicherung mit JavaScript und PHP Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsUser Experience Testing 3.0: Status Quo, Entwicklung und Trends Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsOAuth 2.0: Client & Server Rating: 0 out of 5 stars0 ratingsJava FX - Embedded Rating: 0 out of 5 stars0 ratingsSharePoint-Entwicklung für Einsteiger Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratingsSpring: Vier Perspektiven auf Framework und Ökosystem Rating: 0 out of 5 stars0 ratingsQualität in IT-Architekturen: Strategie und Planung Rating: 0 out of 5 stars0 ratings
Related ebooks
Memory Leaks in Java Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsNebenläufigkeit in Java und C++ Rating: 0 out of 5 stars0 ratingsBig Data: Datenverarbeitung basierend auf MOM und SQL Rating: 0 out of 5 stars0 ratingsMemory Leaks Tools Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsComputer verstehen und selber bauen: Rekenaar Company Rating: 0 out of 5 stars0 ratingsClusterbau: Hochverfügbarkeit mit Linux Rating: 0 out of 5 stars0 ratingsJava Core Programmierung: Memory Model und Garbage Collection Rating: 0 out of 5 stars0 ratingsMicrosoft Azure: Cloud Entwicklung für lokale Applikationen Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsApache Kafka Rating: 0 out of 5 stars0 ratingsDSL mit Xtext/Xtend. Luecken(x)text Rating: 0 out of 5 stars0 ratingsDas Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsApache Tamaya: Einstieg in die Konfiguration in Java Rating: 0 out of 5 stars0 ratingsSprachenkompendium: Vala, Go und Rust Rating: 0 out of 5 stars0 ratingsJavaMoney: Einführung in den JSR-354-Standard Rating: 0 out of 5 stars0 ratingsArchitekturpatterns mit Python: Test-Driven Development, Domain-Driven Design und Event-Driven Microservices praktisch umgesetzt Rating: 0 out of 5 stars0 ratingsSpock, Geb und Selenium: Testframeworks unter die Lupe genommen Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsDatenbank-Tuning - Slow Queries und MySQL-Performance: Slow Queries und MySQL-Performance Rating: 0 out of 5 stars0 ratingsEinführung in die Programmierung mit Java: Begleitunterlagen zu dem Onlinekurs Rating: 0 out of 5 stars0 ratingsJava 7: Project Coin, Generics und NIO2 Rating: 0 out of 5 stars0 ratingsJava FX - Status Quo: Status Quo Rating: 0 out of 5 stars0 ratingsJava EE Testing mit Arquillian Rating: 0 out of 5 stars0 ratingsDocker: Webseiten mittels Containerarchitektur erstellen Rating: 3 out of 5 stars3/5Logging: Schnelleinstieg Rating: 0 out of 5 stars0 ratings
Programming For You
Mikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsDie ultimative FRITZ!Box Bibel - Das Praxisbuch 2. aktualisierte Auflage - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsPython-Grundlagen Rating: 0 out of 5 stars0 ratingsC++ – kurz & gut: Aktuell zu C++17 Rating: 4 out of 5 stars4/5Das große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5SQL – kurz & gut Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsPython programmieren lernen: Der spielerische Einstieg mit Minecraft Rating: 0 out of 5 stars0 ratingsVue.js kurz & gut Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsMicrocontroller für das IoT Rating: 0 out of 5 stars0 ratingsPraktisches Programmieren in C: Grundlagen und Tipps Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsDie ultimative QNAP NAS Bibel - Das Praxisbuch - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsPython kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Programmieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5Programmieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsJavaScript kinderleicht!: Einfach programmieren lernen mit der Sprache des Web Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Games | Game Design | Game Studies: Eine Einführung (Deutschsprachige Ausgabe) Rating: 0 out of 5 stars0 ratingsRichtig einsteigen: Excel VBA-Programmierung: Für Microsoft Excel 2007 bis 2016 Rating: 0 out of 5 stars0 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Softwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5JavaScript kurz & gut Rating: 3 out of 5 stars3/5C++: Kurzportträt einer zeitlosen Sprache Rating: 0 out of 5 stars0 ratings
Reviews for Das Java Memory Model
0 ratings0 reviews
Book preview
Das Java Memory Model - Vadym Kazulkin
GmbH
1 Hardware-Memory-Modelle reloaded
Die Spezifikation des Java Memory Model gehört zu der kompliziertesten im Java-Umfeld; deren Verständnis ist aber in Zeiten von Mehrkernprozessoren extrem wichtig, um Java-Applikationen zu schreiben, die Nebenläufigkeit korrekt unterstützen.
Mit Java 9 dürfte ein Update des Java Memory Models zu erwarten sein [1]. Zu diesem Anlass haben wir uns entschieden, das Thema zu beleuchten. Im ersten Teil der Artikelserie geben wir einen kurzen Überblick über die verschiedenen Hardware-Memory-Modelle, was auf den ersten Blick ungewöhnlich erscheint. Wieso ist uns das wichtig? Das Versprechen, das uns Java gibt „Write once – run everywhere", klingt zwar einfach, ist aber in der Praxis nicht trivial umsetzbar, denn viele Hardware-Memory-Modelle haben ihre eigenen Besonderheiten. Deren Komplexität will die Spezifikation des Java Memory Model [2] vor uns nur verstecken, indem sie eine Abstraktionsschicht definiert. Viele würden das Java Memory Model als sehr komplex erachten – ist es auch. Dafür gibt es Gründe, die wir in dieser Artikelserie näher beleuchten wollen. Zuerst schauen wir uns ein einfaches Beispiel aus Listing 1.1 an.
public class MyClass {
int x, y;
public void executeOnCPU1() {
x = 1;
x = 2;
y = 1;
x = 3;
}
public void executeOnCPU2() {
System.out.println(x:
+x+ y:
+y);
}
}
Listing 1.1: Quizbeispiel
Wir sehen in der Klasse zwei Methoden und gehen davon aus, dass executeOnCPU1 und executeOnCPU2 parallel von unterschiedlichen Threads auf unterschiedlichen Prozessoren ausgeführt werden. Da keinerlei Synchronisation im Code stattfindet, stellen wir nun die Frage: Wenn in der Ausgabe der Methode executeOnCPU2 y=1 erscheint, welche Werte von x könnten in der gleichen Zeile ausgegeben werden? Bei Werten wie x=2 und x=3 sollte jedem klar sein, was das zu erwartende Ergebnis ist. Aber sind auch die Werte x=0 oder x=1 möglich? Wenn wir aber die Fragestellung präzisieren und ergänzen, dass das Programm auf einem x86-Prozessor läuft, ändert sich dadurch bei der Antwort irgendetwas? Und wenn wir es auf dem Android-Gerät mit dem ARMv7 laufen lassen? Gibt es Tools, mit denen wir das verlässlich testen können? Wir haben schon sehr viele Fragen, die wir alle im Rahmen dieses shortcuts beantworten werden. Wir fangen aber mit etwas Theorie an.
L1, L2, L3: die Memory-Hierarchie
Abbildung 1.1 ist eine einfache Darstellung der Memory-Hierarchie. Wir sehen, dass jeder Prozessor eigene L1-(First-Level-) und L2-(Second-Level-)Caches besitzt. Es gibt noch einen optionalen prozessorübergreifenden L3-Cache. Der L1-Cache besteht häufig aus Instruction- und Data-Caches.
Abbildung 1.1: Memory-Hierarchie
In den Caches werden die Informationen gespeichert, die der Prozessor häufig und in naher Zukunft für seine Berechnungen benötigt. Bei der Suche nach Information geht der Prozessor die Caches in der Reihenfolge L1, L2, L3 nacheinander durch. Falls in keinem der Caches die vom Prozessor gesuchte Information zu finden ist (Cache miss), findet ein Zugriff auf den Hauptspeicher statt. Generell gilt: Je näher der Cache am Prozessor ist, desto kleiner ist er. Wie groß die Caches tatsächlich sind, kann man