1. Analyse und Überblick über relevante Konzepte des Java-Speichermodells. 2. Verwandte Konzepte des Speichermodells. Variablen, auf die mehrere Threads zugreifen, werden üblicherweise als gemeinsam genutzte Variablen bezeichnet. Mit anderen Worten: Wenn eine Variable in mehreren CPUs zwischengespeichert wird (was normalerweise bei der Multithread-Programmierung der Fall ist), liegt möglicherweise ein Problem mit der Cache-Inkonsistenz vor. Um das Problem der Cache-Inkonsistenz zu lösen, gibt es normalerweise zwei Lösungen: das Hinzufügen von LOCK# zum Bus und die Verwendung des Cache-Konsistenzprotokolls. Diese beiden Methoden werden beide auf Hardwareebene bereitgestellt. Bei der oben genannten Methode 1 liegt ein Problem vor. Während der Bussperre können andere CPUs nicht auf den Speicher zugreifen, was zu einer geringen Effizienz führt. Cache-Kohärenzprotokoll. Das bekannteste ist das MESI-Protokoll von Intel, das sicherstellt, dass die Kopie der in jedem Cache verwendeten gemeinsam genutzten Variablen konsistent ist. Seine Kernidee ist: Wenn die CPU beim Schreiben von Daten feststellt, dass es sich bei der zu bedienenden Variablen um eine gemeinsam genutzte Variable handelt, d Cache-Zeile der Variablen auf „Keine“
Einführung: 1. Analyseübersicht Verwandte Konzepte des Speichermodells Drei Konzepte in der gleichzeitigen Programmierung Java-Speichermodell Eingehende Analyse von Szenarien mit flüchtigen Schlüsselwörtern, die flüchtige Schlüsselwörter verwenden 2. Verwandte Konzepte Problem mit der Cache-Konsistenz des Speichermodells. Variablen, auf die mehrere Threads zugreifen, werden üblicherweise als gemeinsam genutzte Variablen bezeichnet. Mit anderen Worten: Wenn eine Variable in mehreren CPUs zwischengespeichert wird (was normalerweise bei der Multithread-Programmierung der Fall ist), liegt möglicherweise ein Problem mit der Cache-Inkonsistenz vor. Um das Problem der Cache-Inkonsistenz zu lösen, gibt es normalerweise zwei Lösungen: Durch Hinzufügen von LOCK# zum Bus.
2Grafik und Text des JMM-Java-Speichermodells im Detail Erklärung
Einführung: JMM ist für einen Programmierer, der Java gründlich verstehen möchte, unvermeidlich. Zuerst dieser Artikel ist eher theoretisch und ich versuche, es so einfach wie möglich verständlich zu machen. Wenn es Fehler gibt, hoffe ich, dass Sie mich korrigieren können.
3.Java-String-Übersicht (Teil 2)
Einführung: Die String-Klasse in Java ist die am häufigsten verwendete Klasse in unserer täglichen Entwicklung, aber es ist nicht einfach, diese Klasse wirklich zu beherrschen. Um das wahre und vollständige Bild der String-Klasse wiederherzustellen, unterteilt der Autor es zunächst in zwei Blogbeiträge, um die String-Klasse zu überprüfen. Der Autor geht vom Java-Speichermodell aus, kombiniert mit dem Quellcode der String-Klasse im JDK, insbesondere dem Konstantenpool, der Unveränderlichkeit, der Objekterstellungsmethode der String-Klasse, der Beziehung zwischen der String-Klasse und dem Fliegengewichtsmodus, regulären Ausdrücken, Klonen und die drei Hauptzeichenfolgen Eine umfassende und genaue Erklärung verschiedener Aspekte wie Kategorien.
4.Java-String-Übersicht (Teil 1)
Einführung: Die String-Klasse in Java ist die am häufigsten verwendete Klasse in unserer täglichen Entwicklung, aber es ist nicht einfach, diese Klasse wirklich zu beherrschen. Um das wahre und vollständige Bild der String-Klasse wiederherzustellen, unterteilt der Autor es zunächst in zwei Blogbeiträge, um die String-Klasse zu überprüfen. Der Autor geht vom Java-Speichermodell aus, kombiniert mit dem Quellcode der String-Klasse im JDK, insbesondere dem Konstantenpool, der Unveränderlichkeit, der Objekterstellungsmethode der String-Klasse, der Beziehung zwischen der String-Klasse und dem Fliegengewichtsmodus, regulären Ausdrücken, Klonen und die drei Hauptzeichenfolgen Eine umfassende und genaue Erklärung verschiedener Aspekte wie Kategorien.
5.Detaillierte Einführung in das Java-Speichermodell
Einführung: Dieses Java-Speichermodell gibt an, wie die Java Virtual Machine mit Computerspeicher (RAM) arbeitet. Bei dieser Java Virtual Machine handelt es sich um ein Modell des gesamten Computers, so dass dieses Modell natürlich auch ein Speichermodell – auch Java-Speichermodell genannt – beinhaltet. Das Verständnis des Java-Speichermodells ist wichtig, wenn Sie gleichzeitige Programme korrekt entwerfen möchten. Dieses Java-Speichermodell bezieht sich darauf, wie und wann verschiedene Threads die Werte gemeinsam genutzter Variablen sehen können, die von anderen Threads geschrieben wurden, und wie synchron auf gemeinsam genutzte Variablen zugegriffen wird. Das anfängliche Java-Speichermodell ist unzureichend
6.【Tote Java-Parallelität】-----Analyse des flüchtigen Java-Speichermodells
Einführung: Der vorherige Blog [Deadly Java Concurrency] - Eine eingehende Analyse des Implementierungsprinzips von Volatile hat bereits die Eigenschaften von Volatile erklärt: Volatilität Sichtbarkeit; bei einem flüchtigen Lesevorgang können Sie immer den endgültigen Schreibvorgang für diese Variable sehen; flüchtig ist für einen einzelnen Lese-/Schreibvorgang atomar (32-Bit-Long, Double), aber mit Ausnahme von zusammengesetzten Operationen wie i++; Die unterste Ebene verwendet eine „Speicherbarriere“, um flüchtige Semantik zu implementieren. Unten verwendet LZ „Haben“: „Tödliche Java-Parallelität“ ----- Neuordnung des Java-Speichermodells
Einführung: Beim Ausführen eines Programms ändern Prozessoren und Compiler häufig Anweisungen, um Leistung bereitzustellen. Neuordnung, aber Sie können es nicht beliebig sortieren. Es müssen die folgenden zwei Bedingungen erfüllt sein: 1. Das Ergebnis der Programmausführung kann in einer Single-Thread-Umgebung nicht geändert werden zulässig, wenn Datenabhängigkeiten bestehen. Wenn Sie den vorherigen Blog von LZ gelesen haben, wissen Sie, dass diese beiden Punkte auf eines zurückzuführen sind: JMM ermöglicht eine beliebige Sortierung, die nicht durch das Vorhergehensprinzip abgeleitet werden kann. as-if-serial semantics as-if-se
8.【Java-Parallelität】-----Java-Speichermodell geschieht vorherEinführung: Im letzten Blog ([Deadly Java Concurrency] – Eingehende Analyse des Implementierungsprinzips von Volatile) erwähnte LZ es Es wurde festgestellt, dass es aufgrund des Vorhandenseins von lokalem Thread-Speicher und Hauptspeicher in Verbindung mit der Neuordnung zu Sichtbarkeitsproblemen in Multithread-Umgebungen kommt. Wenn wir also Synchronisation und Sperren richtig verwenden, wann wird Thread A, der die Variable a ändert, für Thread B sichtbar? Wir können nicht in allen Szenarien festlegen, wann von einem Thread geänderte Variablen für andere Threads sichtbar sind. Diese Regel gilt ab JDK 5, JMM verwendet ha
9.
Eine kurze Analyse des Java-Speichermodells und der Garbage CollectionEinführung: Die Der unten stehende Editor bietet Ihnen eine kurze Analyse des Java-Speichermodells und der Garbage Collection. Der Herausgeber findet es ziemlich gut, daher möchte ich es jetzt mit Ihnen teilen und als Referenz dienen. Kommen Sie und schauen Sie sich den Editor an. Ich wünsche Ihnen allen ein glückliches Spiel
Einführung: Bei der gleichzeitigen Programmierung müssen wir uns mit zwei Schlüsselproblemen befassen: wie man zwischen Threads kommuniziert und wie man zwischen Threads synchronisiert (Threads hier beziehen sich auf die gleichzeitige Ausführung aktiver Entitäten). Kommunikation bezieht sich auf den Mechanismus, durch den Threads Informationen austauschen. Bei der imperativen Programmierung gibt es zwei Kommunikationsmechanismen zwischen Threads: Shared Memory und Message Passing.
[Verwandte Frage-und-Antwort-Empfehlung]:
tritt auf, bevor die semantische Reihenfolge des Java-Speichermodells auftritt
Multithreading – Fragen zur Sichtbarkeit des Java-SpeichersDas obige ist der detaillierte Inhalt vonEmpfehlen Sie 10 Artikel zum Java-Speichermodell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!