Java虚拟机之内存模型

Posted dream-chasinggirl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java虚拟机之内存模型相关的知识,希望对你有一定的参考价值。

一.JVM启动流程

技术分享图片

 

 二.JVM基本结构

        技术分享图片

三.java并发基础

 在并发编程中存在两个关键问题①线程之间如何通信 ②线程之间如何同步。

通信

通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。

在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。

在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。

同步

同步是指程序用于控制不同线程之间操作发生相对顺序的机制。

在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥访问。

在消息传递的并发模型里,由于消息的发送必须在消息的接收之前, 因此同步是隐式进行的。

Java并发采用的是共享内存模型,通信隐式进行;同步显示指定。

四.内存模型

       Java内存模型JMM(Java Memory Model)主要目标是定义程序中各个变量(非线程私有)的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节。Java中每个线程都有自己私有的工作内存。工作内存保存了被该线程使用的变量的主内存副本拷贝,线程对变量的读写操作都必须在工作内存进行,无法直接读写主内存中的变量。两个线程无法直接访问对方的工作内存。

  • 每一个线程有一个工作内存和主存独立
  • 工作内存存放主存中变量的值的拷贝

技术分享图片

(1)当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(read)操作;第二,由工作内存执行的相应的load操作;当数据从工作内存拷贝到主内存时,也出现两个操作:第一个,由工作内存执行的存储(store)操作;第二,由主内存执行的相应的写(write)操作。
(2) 每一个操作都是原子的,即执行期间不会被中断。
(3)对于普通变量,一个线程中更新的值,不能马上反应在其他变量中,如果需要在其他线程中立即可见,需要使用 volatile 关键字

        技术分享图片

内存间通信的指令:

技术分享图片

 

 

 

 

 









以上是关于Java虚拟机之内存模型的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机之JVM系统和内存模型

Java虚拟机之内存模型

Java虚拟机之内存模型

Java虚拟机之内存模型

Java虚拟机之自动内存管理机制

Java虚拟机之Java内存区域