JMM内存模型的特性(二)

简介: JMM内存模型学习

JMM内存模型的特性

JMM规范下,三大特性:

  • 可见性
  • 原子性
  • 有序性

可见性

是指当一个线程修改了一个共享变量的值,其他线程是否能够立即知道该变更,JMM规定了所有变量都存储在主内存中。

image.png    系统主内存的共享变量数据修改被写入的时机是不确定的,多线程并发下很可能出现“脏读”,所以每个线程都有自己的工作内存,线程自己的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量所有的操作(读取,赋值等)都需要线程自己在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方的工作内存的变量,线程间的变量值的传递均需要通过主内存完成。

image.png

原子性

指的是一个操作是不可打断的,在多线程环境下,操作不能被其他线程干扰。

有序性

案例:

image.png

有序性:对于一个线程的执行代码而言,我们总是习惯性的认为代码的执行总是从上到下,有序执行。但是为了提升性能,编译器和处理器通常会对指令进行重新排序。Java规范规定了JVM线程内部维持顺序化语义,即只要程序的最终结果与顺序化执行结果一致,那么指令的执行顺序可以与代码顺序不一致,此过程叫指令的重排序。

image.png


目录
相关文章
|
18天前
|
存储 缓存 资源调度
|
18天前
|
存储 缓存 Java
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
42 1
|
18天前
|
存储 算法 编译器
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
71 0
|
18天前
|
存储 Java
Java之内存模型JMM
Java之内存模型JMM
39 0
|
5天前
|
存储 缓存 Java
简单介绍一下什么是“工作内存”和“主内存”(JMM中的概念)
该文介绍了Java多线程中`volatile`关键字确保内存可见性的概念。
18 0
|
18天前
|
缓存 Java 编译器
JMM内存模型 volatile关键字解析
JMM内存模型 volatile关键字解析
17 0
|
18天前
|
存储 缓存 Java
[JVM] 浅谈JMM(Java 内存模型)
[JVM] 浅谈JMM(Java 内存模型)
|
18天前
|
Rust 安全 开发者
Rust的安全特性概览:守护内存安全与空指针的终结者
Rust作为一种系统级编程语言,以其独特的内存安全特性和对空指针的严格管理,为开发者提供了更加稳健和安全的编程环境。本文将对Rust的内存安全机制、空指针处理策略以及其他安全特性进行概览,旨在展示Rust如何帮助开发者构建更加安全和可靠的软件系统。
|
18天前
|
存储 缓存 Java
Java内存模型(Java Memory Model,JMM)
Java内存模型(Java Memory Model,JMM)
28 0
|
11月前
|
存储 缓存 安全
一文打通JMM(Java内存模型)
一文打通JMM(Java内存模型)