From a777b6053a46bd0e43f72742757dc395806003b7 Mon Sep 17 00:00:00 2001 From: "ruyu.li" Date: Mon, 2 Aug 2021 09:54:38 +0800 Subject: [PATCH] JMM --- JVM.md | 10 ++++++++++ images/JVM/JAVA内存模型.jpg | Bin 0 -> 31116 bytes 2 files changed, 10 insertions(+) create mode 100644 images/JVM/JAVA内存模型.jpg diff --git a/JVM.md b/JVM.md index 700f293..76d41b9 100644 --- a/JVM.md +++ b/JVM.md @@ -24,6 +24,16 @@ JVM包含**堆**、**元空间**、**Java虚拟机栈**、**本地方法栈**、 ## JAVA内存模型 +Java Memory Model (JAVA 内存模型,JMM)描述线程之间如何通过内存(memory)来进行交互。具体说来,JVM中存在一个主存区(Main Memory或Java Heap Memory),对于所有线程进行共享,而每个线程又有自己的工作内存(Working Memory,实际上是一个虚拟的概念),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作并非发生在主存区,而是发生在工作内存中,而线程之间是不能直接相互访问的,变量在程序中的传递,是依赖主存来完成的。具体的如下图所示: + +![JAVA内存模型](images/JVM/JAVA内存模型.jpg) + +JMM描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存中读取出变量这样的底层细节。所有的变量都存储在主内存中,每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中变量的一份拷贝)。JMM的两条规定: + +- 线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写 +- 不同的线程之间无法直接访问其他线程工作内存中的变量,线程变量值的传递需要通过主内存来完成 + + ## JVM内存模型 diff --git a/images/JVM/JAVA内存模型.jpg b/images/JVM/JAVA内存模型.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7229a9839b8bde009daa536306e0f24c17f98102 GIT binary patch literal 31116 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 literal 0 HcmV?d00001