Unter der Haube der JVM: Das Java Speichermodell in nebenläufigen Programmen

Gespeichert in:
Bibliographische Detailangaben
Titel: Unter der Haube der JVM: Das Java Speichermodell in nebenläufigen Programmen
Autoren: Christian Iwanzik
Weitere Verfasser: Kompetenzzentrum für nicht-textuelle Materialien
Verlagsinformationen: Free and Open Source Software Conference (FrOSCon) e.V.
Publikationsjahr: 2018
Schlagwörter: Computer Science, Studienbereich Informatik, Ingenieurwissenschaften
Beschreibung: (de)Nebenläufigkeiten bereiten bis heute vielen Entwicklern Unbehagen. Ein grundlegendes Wissen der Speicherabläufe während des Programmlaufs helfen hier aber ein besseres und sicheres Programmieren im nebenläufigen Umfeld zu gewährleisten. Exemplarisch wird dies mit Java auf der JVM erklärt. Seit sich Multicore-Prozessoren immer mehr verbreiten haben, hat auch das Augenmerk auf die nebenläufige Programmierung ebenfalls stark zugenommen. Und nicht erst seit der neuen Concurrency API in Java 8 oder der Reactive Streams Bibliotheken bietet Java die Möglichkeit der nebenläufigen Programmierung. Nebenläufigkeit ist dabei aber nicht immer intuitiv und gemeinsam genutzte Ressourcen sind nicht auf den ersten Blick ersichtlich. Hier lauern selbst mit modernen Konstrukten wie Threadpools, Futures und Promises immer die Gefahr der Race Conditions, Dead Locks und Starvation. Fehler, welche meist erst nach einiger Zeit in Produktion und bei entsprechender Last auftreten und das Finden und Beheben zu einer stundenlangen Tortour ausarten lassen. Es hilft daher Fallstricke und mögliche Fehlerfälle von Nebenläufigkeiten im Vorfeld zu kennen und zu vermeiden. Hierbei kann einem ein grundlegendes Verständnis von Speichermodellen und deren Abläufen helfen, wobei Java hier mit dem Java Memory Modell eine Abstraktion über die vielfältigen Rechnerachitekturen bietet. Der Talk gibt zunächst einen Einblick in das Java Memory Modell als Abstraktion und die grundlegenden Funktionsweisen eines Speichermodells im parallelen Betrieb. Es werden die Operationen 'flush' und 'pull' eingeführt, womit einzelne Threads ihren lokalen Cache mit dem Hauptspeicher synchronisieren. Mit Beispielen wird gezeigt, wie die Probleme der Atomicity, des Reordering und der Sequential Consistency durch die Mechanismen des Speichermodells auftreten können und welche Implikationen dies im Betrieb hat. Im Anschluss werden Patterns gezeigt, womit einige dieser Probleme vermieden werden können. Wo Patterns nicht greifen, werden die Javamechanismen 'final Variablen', ...
Publikationsart: course material
moving image (video)
Sprache: German
Relation: https://av.tib.eu/media/:2176
Verfügbarkeit: https://av.tib.eu/media/:2176
Rights: https://creativecommons.org/licenses/by/4.0
Dokumentencode: edsbas.18B58221
Datenbank: BASE
Beschreibung
Abstract:(de)Nebenläufigkeiten bereiten bis heute vielen Entwicklern Unbehagen. Ein grundlegendes Wissen der Speicherabläufe während des Programmlaufs helfen hier aber ein besseres und sicheres Programmieren im nebenläufigen Umfeld zu gewährleisten. Exemplarisch wird dies mit Java auf der JVM erklärt. Seit sich Multicore-Prozessoren immer mehr verbreiten haben, hat auch das Augenmerk auf die nebenläufige Programmierung ebenfalls stark zugenommen. Und nicht erst seit der neuen Concurrency API in Java 8 oder der Reactive Streams Bibliotheken bietet Java die Möglichkeit der nebenläufigen Programmierung. Nebenläufigkeit ist dabei aber nicht immer intuitiv und gemeinsam genutzte Ressourcen sind nicht auf den ersten Blick ersichtlich. Hier lauern selbst mit modernen Konstrukten wie Threadpools, Futures und Promises immer die Gefahr der Race Conditions, Dead Locks und Starvation. Fehler, welche meist erst nach einiger Zeit in Produktion und bei entsprechender Last auftreten und das Finden und Beheben zu einer stundenlangen Tortour ausarten lassen. Es hilft daher Fallstricke und mögliche Fehlerfälle von Nebenläufigkeiten im Vorfeld zu kennen und zu vermeiden. Hierbei kann einem ein grundlegendes Verständnis von Speichermodellen und deren Abläufen helfen, wobei Java hier mit dem Java Memory Modell eine Abstraktion über die vielfältigen Rechnerachitekturen bietet. Der Talk gibt zunächst einen Einblick in das Java Memory Modell als Abstraktion und die grundlegenden Funktionsweisen eines Speichermodells im parallelen Betrieb. Es werden die Operationen 'flush' und 'pull' eingeführt, womit einzelne Threads ihren lokalen Cache mit dem Hauptspeicher synchronisieren. Mit Beispielen wird gezeigt, wie die Probleme der Atomicity, des Reordering und der Sequential Consistency durch die Mechanismen des Speichermodells auftreten können und welche Implikationen dies im Betrieb hat. Im Anschluss werden Patterns gezeigt, womit einige dieser Probleme vermieden werden können. Wo Patterns nicht greifen, werden die Javamechanismen 'final Variablen', ...