Wenn man von Speicher in Java spricht, denken viele Leute an JVM. Das in diesem Artikel besprochene Speichermodell wird auch so missverstanden. Tatsächlich ist dies auch ein Testpunkt, der im Interview eher zu Fehlern führt. Die Abkürzung des Speichermodells ist meiner Meinung nach nicht leicht zu verwechseln, wenn sie in englischen Namen angezeigt wird. Im Folgenden erklären wir das Konzept des Java-Speichermodells und helfen Ihnen, es von JVM zu unterscheiden.
1. Konzept
Das Java-Speichermodell (Java Main Memory, kurz JMM) ist ein abstraktes Konzept und weist viele Ähnlichkeiten mit dem Computerspeichermodell auf. JMM umfasst hauptsächlich Threads, Arbeitsspeicher und Hauptspeicher für die Interaktion. Der Arbeitsspeicher kann mit dem Berechnungscache verglichen werden, aber der Arbeitsspeicher zwischen Threads ist dem Hauptspeicher des Computers ähnlich Die Übertragung variabler Werte zwischen Threads erfolgt hauptsächlich über den Hauptspeicher. Gleichzeitig verfügt JMM auch über eine Befehlsneuordnung, um die Reihenfolge der Codeausführung zu optimieren. Einfach ausgedrückt ist die Reihenfolge, in der der Code geschrieben wird, nicht unbedingt die Reihenfolge, in der der Code ausgeführt wird.
2. Der Unterschied zwischen JMM und JVM
Das Java-Speichermodell ähnelt der Java-Speicherstruktur (JVM-Speicherstruktur). Viele Leute denken fälschlicherweise, dass beides dasselbe ist, was während des Interviewprozesses häufig zu falschen Antworten führt.
Der Java-Heap und der Methodenbereich sind Datenbereiche, die von mehreren Threads gemeinsam genutzt werden. Mit anderen Worten: Mehrere Threads können möglicherweise mit denselben Daten arbeiten, die im Heap- oder Methodenbereich gespeichert sind. Dies nennen wir oft „Java-Threads kommunizieren über den gemeinsamen Speicher.“
Das Java-Speichermodell ist eine Übersetzung des englischen Java Memory Model (JMM). Tatsächlich existiert JMM nicht so real wie die JVM-Speicherstruktur. Es ist nur ein abstraktes Konzept. JSR-133: Java-Speichermodell und Thread-Spezifikation beschreibt, dass JMM mit Multithreading zusammenhängt. Es beschreibt eine Reihe von Regeln oder Spezifikationen, die festlegen, dass ein Thread in eine gemeinsam genutzte Variable schreibt .
Um es kurz zusammenzufassen: Javas Multithreads kommunizieren über den gemeinsam genutzten Speicher. Aufgrund der Verwendung des gemeinsam genutzten Speichers für die Kommunikation treten während des Kommunikationsprozesses und JMM eine Reihe von Problemen wie Sichtbarkeit, Atomizität, Reihenfolge usw. auf Es handelt sich um ein Modell, das auf Multithread-Kommunikation und einer Reihe damit verbundener Funktionen basiert. JMM definiert einige Syntaxsätze, die in der Java-Sprache Schlüsselwörtern wie „flüchtig“ und „synchronisiert“ zugeordnet werden.
Das Obige ist eine Einführung in das Speichermodell in Java. Dieser Artikel konzentriert sich auf die Vermittlung der grundlegenden Theorie. Sie können sich auf die Unterscheidung zwischen jmm und jvm konzentrieren und sich beim zukünftigen Studium klarer sein .