Schlagwort-Archive: memory

Das Java Memory Model

Als Java-Programmierer macht man sich im Allgemeinen keine Gedanken über die Hardware, auf der das Programm ausgeführt wird. Das ist eine riesige Erleichterung für Entwickler, aber das bedeutet auch, dass sich JVM und Compiler um das gleiche Verhalten auf unterschiedlicher Hardware (Multiprozessorsysteme) kümmern müssen. Mit Java 5 wurde der JSR-133 umgesetzt, dieser beschreibt das Java Memory Model.

Ein Programm mit mehreren Threads kann bei mehrmaliger Ausführung jeweils einen anderen Ablauf haben (je nachdem, wann ein anderer Thread aktiviert wird). Das Memory Model definiert also nicht einen bestimmten Ablauf für ein Programm, sondern bietet die Möglichkeit, eine bestimmten Ausführungsreihenfolge für ein Programm zu verifizieren. Der Entwickler kann sich einen Ablauf überlegen, in dem das Programm ein falsches Verhalten zeigt, und das Memory Model sagt dann, ob dieser für das Programm gültig ist. Da sowohl der Compiler, als auch der Prozessor pro Thread unabhängige Statements in eine andere Reihenfolge bringen können, gibt es sehr viele potentielle Fehler. Das Memory Model bietet aber über Synchronisierung die Möglichkeit, eine threadübergreifende Vorher-Nachher-Beziehung zwischen Programmteilen zu definieren.

Das Memory Model ist in der „Java Language and Virtual Machine Specification“  beschreiben, die für Java 8 im Abschnitt 17.4. Die Spezifikation ist relativ einfach zu Lesen mit vielen Beispielen, ich empfehle die Lektüre!

Weitere Hintergrundinformationen und Beispiele gibt es in dem Google Talk und auf der Seite http://www.cs.umd.edu/~pugh/java/memoryModel/.