java内存模型jvm虚拟机简要分析
作者:小伙无限帅 发布时间:2022-09-08 09:29:34
标签:java,虚拟机,jvm,内存模型
主内存和工作内存
Java 内存模型规定了所有的变量都存储在主内存中, 每条线程有自己的工作内存
线程的工作内存中保存了被该线程使用的变量的主内存副本, 线程对变量的所有操作 (读取、赋值等) 都必须在工作内存中进行, 而不能直接读写主内存中的数据
不同的线程之间也无法直接访问对方工作内存中的变量, 线程间变量值的传递均需要通过主内存来完成
内存间的交互操作
原子性、可见性、有序性
Java 内存模型是围绕着在并发过程中如何处理原子性、可见性、有序性这三个特征来建立的
原子性
基本数据类型的访问、读写都是具备原子性的。synchronized 实现原子性
可见性
可见性是指当一个线程修改了共享变量的值时, 其他线程能够立刻得知这个修改Java 内存模型是通过在变量修改后将新值同步回主内存, 在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方式来实现可见性的volatile、synchronized、final 实现可见性
有序性
volatile、synchronized 实现有序性
来源:https://blog.csdn.net/qq271003351/article/details/120246184


猜你喜欢
- 最近有个项目的几张表,数量级在千万以上,技术栈是SpringBoot+Mybatis-plus+MySQL。如果使用单表,在进行查询操作,非
- 项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap
- 本文实例为大家分享了Java简单实现定时器的具体代码,供大家参考,具体内容如下一、定时器定时器相当于一个任务管理器。有些任务可能现在执行,
- 一、可变参数方法的定义首先看下可变参数方法在代码上是如何定义的,如下所示:public static void method1(Intege
- 若干年前在使用SpringMVC的时候,发现springMVC可以把HttpSession,HttpRequest组件化注入:@Autowi
- 经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或
- 本文实例讲述了Android自定义控件样式的方法。分享给大家供大家参考,具体如下:Android控件样式自定义是用定义在drawable文件
- 背景ELMAH就是一个日志的拦截和处理组件,说到.net的日志组件,大家的第一反应该是Log4Net、NLog等这些东西,关于Log4Net
- 前段时间分享了《阅读跟踪 Java 源码的几个小技巧》是基于 Eclipse 版本的,看大家的留言都是想要 IDEA 版本的源码阅读技巧。所
- 在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:public static void moveFolder(S
- 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何自定义一个类似热门标签那样
- 本文章是基于鸿洋的Android 自定义View (一) 的一些扩展,以及对Android自定义View构造函数详解里面内容的一些转载。首先
- 1. 可变参数在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化.格式:修饰符 返回值类型 方
- 本文实例讲述了Android开发之搜索框SearchView用法。分享给大家供大家参考,具体如下:介绍:SearchView时搜索组件,可以
- eclipse导入Spring配置文件约束 Windows-Preference-XML-XMLCatalog点 Add 选Fil
- 使用范围synchronized使用上用于同步方法或者同步代码块在锁实现上是基于对象去实现使用中用于对static修饰的便是class类锁使
- 目录为什么要用异步框架,它解决什么问题?SpringBoot如何实现异步调用?实现异步调用为什么要给@Async自定义线程池?多个线程池处理
- 本文介绍了详解Android中PopupWindow在7.0后适配的解决,分享给大家,具体如下:这里主要记录一次踩坑的经历。需求:如上图左侧
- Netty设置为Https访问SSLContextFactorypublic class SSLContextFactory {
- 1、图的定义我们知道,前面讨论的数据结构都有一个框架,而这个框架是由相应的算法实现的,比如二叉树搜索树,左子树上所有结点的值均小于它的根结点