网站首页 > java教程 正文
内存模型简介
JMM(java内存模型Java Memory Model)本身是一种抽象的概念,描述的是一组规则或规范。通过这组规范定义了程序中各个变量的访问方式。Java本身的运行是基于虚拟机的,在虚拟机的规范中,Java定义了一种内存模型,来屏蔽掉硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java 线程之间的通信由 Java 内存模型控制的,下图就是java内存模型的抽象结构
内存模型的组成
- 主内存:就是各个线程共享的序曲,对应着jvm虚拟机堆区
- 本地内存:这个区域就是每个线程独有区域,不同线程不能相互访问,对应着jvm虚拟机栈
- 工作方式:
线程A把本地内存A中更新过的共享变量刷新到主内存
线程B到主内存中去读取线程A之前已更新过的共享变量
内存模型在保证有序性时的两个原则
- as-if-seria
不管如何重排序,单线程程序的执行结果不能被改变
- happens-before
在jmm中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happers-before关系
1.程序顺序规则
一个线程中的每个操作,happens-before 于该线程中的任意后续操作
2.监视器锁规则
对一个锁的解锁,happens-before于随后对这个锁的加锁
3.volatile变量规则
对一个volatile域的写,happens-before 于任意后续对这个volatile域的读
4.传递性
如果A happens-before B,且 B happens-before C ,那么 happens-before C
并发三大特性
* 原子性
原子本意是不能再进一步分割的最小粒子,而原子操作就是一个不可中断操作。
1.处理器
是通过对总线锁或者缓存锁进行锁定保证原子性
2.java
可以通过锁或者CAS方式来实现原子操作
- 有序性
1.通过volatile 修改,来实现,原理通过内存屏障实现
2.通过锁,来实现 例如synchronized
- 可见性
略
猜你喜欢
- 2024-10-07 java 面对对象的三大特性——面试的时候一直在看,面试官很满意
- 2024-10-07 理解Java的三大特性之封装(java的封装是什么)
- 2024-10-07 揭秘Java五大特性,你不容错过!(java的基本特性)
- 2024-10-07 JAVA基础——面向对象三大特性:封装、继承、多态
- 2024-10-07 Java有哪些特性?(请简述java有哪些特性)
- 2024-10-07 Java-面向对象三大基本特性,五大基本原则
- 2024-10-07 java多线程中的三大特性用代码给大家解释清楚
- 2024-10-07 好程序员Java学习路线分享三大特性之多态
- 2024-10-07 Java 12 新特性概述(java语言具有较好的安全性和可移植性及与平台无关等特性)
- 2024-10-07 Java知识扫盲:Java的11大主要特性总结
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)