java内存模型及内存与cpu之间的关系

  

主内存和cpu之间的关系,因为cpu是在是处理速度太快了。所以一般cpu都有一个cpu缓存,上图的意思是主内存---》cpu缓存---》cpu寄存器---》cpu执行处理,写的时候反之。

看上图,就是多线程情况下java操作变量的大致步骤,需要注意的是,多线程操作的变量都是从主内存拿到的是变量的副本,然后进行一系列操作后,另赋值给主内存,所以,这种情况下就会导致多线程情况下数据不一致的问题。

原文地址:https://www.cnblogs.com/coder-lzh/p/8975374.html

时间: 2024-08-30 11:05:48

java内存模型及内存与cpu之间的关系的相关文章

java并发学习--第十章 java内存模型的内存语义

一.锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则. 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 我们把上面这句话再整理下: 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中. 当线程获取锁时,JMM会把该线程对应的本地内存置为无效.从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量. 锁的内存语义实现: synchronized.ReentrantLock: 二.volatile内存

JVM并发机制的探讨——内存模型、内存可见性和指令重排序

[转]http://my.oschina.net/chihz/blog/58035 文章写的非常好,为作者点赞. JAVA内存模型 对于我们平时开发的业务应用来说,内存应该是访问速度最快的存储设备,对于频繁访问的数据,我们总是习惯把它们放到内存缓存中,有句话不是说么,缓存就像是清凉油,哪里有问题就抹一抹.但是CPU的运算速度比起内存的访问速度还要快几个量级,为了平衡这个差距,于是就专门为CPU引入了高速缓存,频繁使用的数据放到高速缓存当中,CPU在使用这些数据进行运算的时候就不必再去访问内存.但

Java内存模型与内存结构

Java内存模型 一.简介 Java内存模型(JMM)主要是为了规定线程和内存之间的一些关系:根据JMM的设计,系统存在一个主内存(Main Memory)和工作内存(Work Memory),Java中所有变量都储存在主内存中,对于所有线程都是共享的:每条线程都有自己的工作内存,工作内存中存储了该线程已读.写共享变量的副本,工作内存是JMM的一个抽象概念,主要包括:缓存,写缓冲区,寄存器以及其他的硬件和编译器优化:线程对所有变量的操作都是在工作内存中进行的,线程之间无法相互直接访问,变量传递均

java内存模型,内存区域

Java虚拟机内存区域总结:Java虚拟机相当于一个抽象的计算机操作系统, 其管理的内从区域大体上可以分为栈和堆,就像c或c++中对内存的分类一样, 但这样的分类对于Java虚拟机来说太过粗浅, 实际上Java虚拟机管理的内存区域分为程序计数器.虚拟机栈.本地方法栈.堆和方法区, 根据各区域是属于线程私有还是由线程共享,这些区域可以分为两类,下面分别进行说明. 线程私有的内存区域 1.程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,它可以看作是当前线

CPU,内存,磁盘,指令以及它们之间的关系

众所周知计算机的组成是由控制器.运算器.存储器.输入.输出设备五部分构成,而其中CPU就是由控制器.运算器.寄存器和时钟四部分构成,磁盘和内存就属于存储设备. CPU指令主要有以下四个: 1.加载:把一个字节或一个字从内存中赋值到寄存器,覆盖原来寄存器的内容 2.存储:把一个字节或一个字从寄存器复制到内存中的某个位置,覆盖原来内存上这个位置的内容 3.操作:将两个寄存器的内容赋值到ALU,ALU对这两个字进行算术操作,将结果存储在某个寄存器中,以覆盖寄存器中原来的值 4.跳转:从指令本身抽取一个

计算机支持的最大内存与CPU之间的关系

在使用计算机时,其最大支持的内存是由  操作系统 和 硬件 两方面决定的. 先说一下硬件方面的因素,在计算机中 CPU的地址总线数目 决定了CPU 的 寻址 范围,这种由地址总线对应的地址称作为物理地址.假如CPU有32根地址总线(一般情况下32位的CPU的地址总线是32位,也有部分32位的CPU地址总线是36位的,比如用做服务器的CPU),那么提供的可寻址物理地址范围 为 232=4GB(在这里要注意一点,我们平常所说的32位CPU和64位CPU指的是CPU一次能够处理的数据宽度,即位宽,不是

jvm内存模型和内存分配以及jdk、jre、jvm是什么关系

1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域.(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行. 2.jdk.jre.jvm是什么关系?(1)JRE(Java

【转】jvm 内存模型及内存调优

一,JVM内存模型概括 还有一个寄存器,线程运行于其上面 1.程序计数器 记录线程的执行位置,线程私有内存,唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域 2.线程栈(VM stack) 栈的默认大小是1M -Xss2m 这样设置成2M 异常 :Fatal: Stack size too small 异常的引起一般是线程数目太多 3.本地方法栈(native stack) 即为一些Native方法分配的stack 异常:java.lang.OutOfMemo

【转】深入JVM系列(一)之内存模型与内存分配

http://lovnet.iteye.com/blog/1825324 一.JVM内存区域划分 大多数 JVM 将内存区域划分为 Method Area(Non-Heap),Heap,Program Counter Register, Java Method Stack,Native Method Stack 和Direct Memomry(注意 Directory Memory 并不属于 JVM 管理的内存区域).前三者一般译为:方法区.堆.程序计数器.但不同的资料和书籍上对于后三者的中文译