首页 > 系统相关 >Java内存模型-JMM

Java内存模型-JMM

时间:2023-10-13 11:55:40浏览次数:41  
标签:Java 模型 volatile 内存 JVM JMM 线程

内存模型与内存区域

 很多时候,二者会混淆,所以咱们先做区分:内存模型与内存区域

  • 内存区域是指JVM运行时将数据分区域存储,强调的是对空间的分配
  • 内存模型(JMM)是定义了线程和主内存之间的抽象关系。即定义了 JVM 在计算机内存中的工作方式

内存模型

抽象关系定义

  • 线程之间的共享区间为主内存,也就是硬件中
  • 每个线程都有个属于自己的本地内存,用于存储线程变化过程中的值。本地内存是JMM的一个抽象概念,并不真实存在
  • 取值过程:线程 <---> 工作内存 <---> 寄存器和高速缓存 <---> 主内存。寄存器和高速缓存的作用在于加快读的速度
  • JVM的静态内存储模型(JVM内存模型)只是一种对内存的物理划分而已,它只局限在内存,而且只局限在JVM的内存

内存模型结构图

  图解:由于JMM的存在,让线程有本地内存(工作内存)的定义。同时也定义了,数据的访问方式。
image

volatile

  volatile 是基于JMM下的一个产物。基于JMM下线程之间相互独立,互不干涉,以至于相互通讯变得困难,故诞生了 volatile。
private volatile String COM_STR = new String() ;

死记volatile的特性:

  • 可见性
  • 有序性,禁止指令重排序(happen-before原则)
  • 不能保证原子性

理解volatile 的特性的一个好方法,是将volatile看成使用互斥锁。对其进行的读、写操作属于同步操作
锁的特性是可以做到临界区内保持原子操作。而Happens-before 规则也使得操作之间存在可见性。

使用 volatile后内存数据共享方式(嗅探是关键)

image

标签:Java,模型,volatile,内存,JVM,JMM,线程
From: https://www.cnblogs.com/zz-1q/p/17761700.html

相关文章

  • java学习日记day02
    java学习日记day02冯诺伊曼体系)cmd指令......
  • 计算机内存不足,若要还原足够的内存以使程序正常工作,请保存文件,然后关闭或重新启动所有
    电脑提示计算机内存不足,若要还原足够的内存以使程序正常工作,请保存文件,然后关闭或重新启动所有打开的程序。遇到这种问题其实是因为没有设置虚拟内存或者设置太小了 1、更改虚拟内存的操作,在桌面上右键单击计算机,选择属性;2、选择高级系统设置,弹出系统属性窗口;3、直接定位到......
  • Java8新特性之Optional容器(七)
    1.Optional介绍Optional是Java8提供的一个容器对象,可以包含一个为null或者不为null的对象;使用该对象可以更方便的避免项目中的NPE,在新版的SpringDataJPA中已经实现了对该类的支持;注意该类是被final修饰的,同时没有实现任何接口;publicfinalclassOptional<T>{pri......
  • java框架中的controller层、dao层、domain层、service层、view层【转】
      1.Controller层:接口层,用户访问请求时对接。  Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归......
  • 【Java】用户在线人数统计的简单实现
    一、需求效果:就是进入首页时能查看在线人数,没有特定要求,那我就不刷这个接口了就进入首页加载一次 二、实现思路:思路参考博客:https://blog.csdn.net/GitLuckyd/article/details/124488063如果是以前那种JSP的单体项目,可以用Servlet的监听器API来做但是不管是Servlet还......
  • Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别
    前言今天给大家分享一个SpringBoot整合Tess4j库实现图片文字识别的小案例,希望xdm喜欢。文末有案例代码的Git地址,可以自己下载了去玩玩儿或继续扩展也行。话不多说,开整吧。什么是Tess4j库先简单给没听过的xdm解释下,这里要分清楚Tesseract和Tess4j的区别。Tesseract是一个......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(一)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981......
  • 打造炫酷效果:用Java优雅地制作Excel迷你图
    摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言迷你图是一种简洁而有效的数据可视化方式,常用于展示趋势和变化。它通常由一组小型的线条或柱状图组成,用于表示数据的变化情况。迷你图的主要......
  • 【开源】给ChatGLM写个,Java对接的SDK
    作者:小傅哥-百度搜小傅哥bugstack博客:bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • 在java中将InputStream对象转换为File对象(不生成本地文件)
    importorg.apache.commons.io.IOUtils;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;publicclassStreamUtil{staticfinalStringPREFIX="stream2file";//前缀字符串定义文件名;必须至少三个字符......