JVM技术之旅-了解介绍JMM模型

简介: JVM技术之旅-了解介绍JMM模型

前提概要

java本身具有垃圾回收器这种智能的自动化管理内存功能之外,就是多线程的支持并发机制功能实现,线程之间的通信方式,java数据模型采用的是共享内存,此外还可以采用信号量等机制/套接字通信机制。


Java的并发采用“共享内存”模型,线程之间通过读写内存的公共状态进行通讯多个线程之间是不能通过直接传递数据交互的,它们之间交互只能通过共享变量实现



主要目的是定义程序中各个变量的访问规则。


JMM模型规定所有变量都存储在主内存,每个线程还有自己的工作内存。


1.线程工作内存中保存被该线程使用到的变量的拷贝(从主内存中拷贝过来),线程对变量的所有操作都必须在工作内存中执行,而不能直接访问主内存中的变量


2.线程间无法直接访问对方工作内存变量,线程间变量值传递要通过主内存实现


3.主内存主要对应Java堆中实例数据部分。工作内存对应于虚拟机栈中部分区域


Intel的处理器的系统模型。如图所示:


image.png


主存和工作内存的交互方式

image.png


Java线程之间的通信由内存模型JMM(Java Memory Model)控制。


(1)JMM决定线程对变量的写入何时对另一个线程可见


(2)线程之间共享变量存储在主内存中


(3)线程有一个私有的本地内存,里面存储了读/写共享变量的副本


(4)JMM通过每个线程的本地内存之间的交互,提供内存可见性保证



可见性和有序性:


(1)可见性:共享变量在多个本地内存中有副本时,如果本地内存修改了该变量的副本,其他变量应该能够看到修改后的值


(2)有序性:保证线程的有序执行,保证线程安全



工作内存和内存间交互操作:


lock(锁定):作用主内存的变量,把变量标识为一条线程独占状态


unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定


read(读取):作用于主内存变量,把主内存的一个变量读取到工作内存中,以便随后的load操作。(非必须)


load(载入):作用于工作内存,把read操作读取到工作内存的变量载入到工作内存的变量副本中。(非必须)


use(使用):作用于工作内存变量,把工作内存中变量值传递给一个执行引擎,虚拟机遇到一个使用到变量的指令时都会使用该指令


assign(赋值):作用于工作内存变量。把执行引擎接收到的值赋值给工作内存的变量,虚拟机遇到一个给变量赋值的指令时


store(存储):把工作内存变量的值传递给主内存。(非必须)


write(写入):把store操作的值入到主内存的变量中。(非必须)



注意:


1.不允许read、load、store、write操作之一单独出现


2.不允许一个线程丢弃assgin操作


3.不允许一个线程不经过assgin操作,就把工作内存中的值同步到主内存中


4.一个新的变量只能在主内存中生成


5.一个变量同一时刻只允许一条线程对其进行lock操作。但lock操作可以被同一条线程执行多次,只有执行相同次数的unlock操作,变量才会解锁


6.如果对一个变量进行lock操作,将会清空工作内存中此变量的值,执行引擎使用这个变量前,需要重新执行load或者assgin操作初始化变量的值。


7.如果变量没有被锁定,不允许对其执行unlock操作,也不允许unlock一个被其他线程锁定的变量


8.对变量执行unlock操作之前,需要将该变量同步回主内存中




相关文章
|
2月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
5月前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
100 1
|
1月前
|
安全 Java API
🌟探索Java宇宙:深入理解Java技术体系与JVM的奥秘
本文深入探讨了Java技术体系的全貌,从Java语言的概述到其优点,再到Java技术体系的构成,以及JVM的角色。旨在帮助Java开发者全面了解Java生态,提升对Java技术的认知,从而在编程实践中更好地发挥Java的优势。关键词:Java, JVM, 技术体系, 编程语言, 跨平台, 内存管理。
34 2
|
1月前
|
Java
【JVM】双亲委派模型
【JVM】双亲委派模型
20 1
|
5月前
|
存储 算法 Java
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
57 1
|
4月前
|
监控 Java 调度
探索JVM性能调优,调优不仅是技术挑战,更是成长过程。
【7月更文挑战第1天】探索JVM性能调优:** 本文深入JVM内存模型,关注堆内存与方法区、栈的优化,通过调整-Xms, -Xmx及垃圾收集器参数减少GC频率。探讨了Serial到G1等垃圾收集器的选择策略,利用jstat、jmap等工具诊断性能瓶颈。实战案例中,通过问题定位、内存分析解决Full GC问题,强调开发者需理解JVM原理,运用工具在复杂场景下实现高效调优。调优不仅是技术挑战,更是成长过程。
44 0
|
5月前
|
存储 缓存 算法
详解JVM内存优化技术:压缩指针
详解JVM内存优化技术:压缩指针
|
5月前
|
存储 缓存 监控
深入解析JVM内存分配优化技术:TLAB
深入解析JVM内存分配优化技术:TLAB
|
5月前
|
存储 安全 Java
深入理解Java内存模型(JMM)与虚拟机的内存结构(JVM)
深入理解Java内存模型(JMM)与虚拟机的内存结构(JVM)
|
6月前
|
存储 安全 Java
深入探究Java虚拟机(JVM)的技术细节
深入探究Java虚拟机(JVM)的技术细节