多核多并发下
Java 虚拟机是如何解决这些问题的。
JMM Java内存模型: 为了屏蔽掉硬件 操作系统的内存访问差异。以实现让Java程序在各种平台下都能达到一致的并发效果 Java虚拟机规范中 定义了Java内存模型。
规范了Java虚拟机与计算机内存是如何协同工作的。 规定了一个线程是如何 何时看到 其他线程修改过的共享变量的值 以及在必须时 如何同步的访问共享变量
在jvm中内存分配
一个是堆heap: java里的堆是一个运行时的数据区 是由垃圾回收来负责的 堆的优势是:可以动态的分配内存大小 缺点是:动态会慢一些
一个是栈Stack: 优势:存取速度比堆要快 速度仅次于 计算机中的寄存器 数据可以共享 缺点是:大小与生存期是确定的 缺乏灵活性。 存一些基本变量: int short float long byte double char
调用栈和本地变量存放在线程栈上 但是对象本身是存放在堆上的。
一个对象包含方法中的变量: 这些方法中也许包含本地变量 这些变量是存放在线程栈上的 即是这些方法所属的对方存放在堆上
静态成员变量存放在堆上
当多个线程访问一个对象的时候 他们都会把 这个对象的成员变量私有拷贝一份

简单的计算机架构图示。

cpu Registers : cpu寄存器 每个cpu都包含一些列的寄存器他们是cpu的基础 CPU 在寄存器上执行操作的速度远大于在主存上执行的速度
cpu Cache : cpu高速缓存 计算机的存储设备与计算机的处理器的运算速度差距很大。 所以设计了一层 接近处理器速度的缓存来作为内存与处理器
比如说cpu是(白菜)搬运工 那么cpu cache 就是卡车 从主存上读取一卡车数据 运过来 让搬运工搬如此来回反复。
Java内存模型 对应计算机内存架构

线程之间共享的变量存放在主内存。
每一个线程都有一个本地的私有内存 主内存就是硬件的内存。为了获取更好的运行速度虚拟器有可能优先存储到寄存器和缓存区
Java内存模型中的 线程的工作内存是cpu的寄存器和高速缓存的一个抽象的描述。
JVM的静态存储模型(JVM内存模型):一种对物理内存的划分。只局限在内存且只局限在jvm的内存。

线程A和B要通信 需要先把A线程 变量刷新到主内存 然后线程B再去访问读取。








浙公网安备 33010602011771号