java内存模型

jingjinggood      2022-05-11     317

关键词:

1.java内存模型是什么?

java内存模型即Java Memory Model,简称JMM,其规范了Java虚拟机与计算机内存时如何协同工作的,规定了一个线程如何和何时看到其他线程修改过的值,以及在必须时,如何同步访问共享变量。

技术图片

 

技术图片

 

 

 

2.JVM的内存分配

在解释Java内存模型之前,我们先了解下JVM的内存分配的几个概念,如下图所示,Java内存模型把内存分为两大块,一个是堆一个是栈。

  • 堆heap:运行时的数据区,由垃圾回收负责,动态分配大小。存取速度较慢;
  • 栈stack:存取速度比堆快,仅次于寄存器,数据可以共享,大小和生存期等是固定的

3 java内存模型的抽象结构

接下来我们从抽象角度看看线程和主存之间的抽象关系:

线程之间的共享变量存储在主内存里,每个线程都有个私有的本地内存,存储了该线程以读/写共享变量的副本。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。本地内存是JMM的一个抽象概念,并不真实存在。

从上图来看,如果线程A与线程B之间要通信的话,必须要经历下面2个步骤。
1)线程A把本地内存A中更新过的共享变量刷新到主内存中去。
2)线程B到主内存中去读取线程A之前已更新过的共享变量。

本地内存A和本地内存B由主内存中共享变量x的副本。假设初始时,这3个内存中的x值都为0。线程A在执行时,把更新后的x值(假设值为1)临时存放在自己的本地内存A中。当线程A和线程B需要通信时,线程A首先会把自己本地内存中修改后的x值刷新到主内

存中,此时主内存中的x值变为了1。随后,线程B到主内存中去读取线程A更新后的x值,此时线程B的本地内存的x值也变为了1。
从整体来看,这两个步骤实质上是线程A在向线程B发送消息,而且这个通信过程必须要经过主内存。JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。

4 递归操作与栈帧

 

 技术图片

 

 技术图片

 

 

5 JVM分类

技术图片

 

 

6 java内存模型

合理的内存模型可以使GC的性能更加强大,不必太大的浪费服务器的性能,从而减少阻塞所带来的程序的性能影响。

 

例: 你现在收拾屋子 ,基本 上我们会有两类收拾方法:方式一: 简单的进行物品的码放以及打扫卫生, 时间短;

上方式二:房屋装修与改造,时间长。Java中数据保存的内存位置:堆内存(调优、原理)

最需要强调的就是JDK 1.8之后所带来的内存结构改变从及Gc策略提升;

 技术图片

 

 

技术图片

 

 

java内存模型

Java内存模型Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即... 查看详情

java内存模型

1.java内存模型是什么?java内存模型即JavaMemoryModel,简称JMM,其规范了Java虚拟机与计算机内存时如何协同工作的,规定了一个线程如何和何时看到其他线程修改过的值,以及在必须时,如何同步访问共享变量。    2... 查看详情

java内存模型

Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。在JDK1.5发布后,Java的内存模型已经成熟和完善起来了。1.主内存与工作内存:Java... 查看详情

第三章java内存模型(上)

 本章大致分为4部分:Java内存模型的基础:主要介绍内存模型相关的基本概念Java内存模型中的顺序一致性:主要介绍重排序和顺序一致性内存模型同步原语:主要介绍3个同步原语(synchroized、volatile和final)的内存语义及重... 查看详情

java内存模型的历史变迁

本文通过介绍Java的新/旧内存模型,来展示Java技术的历史变迁。旧的Java内存模型Java使用的是共享内存的并发模型,在线程之间共享变量。Java语言定义了线程模型规范,通过内存模型控制线程与变量的交互,从而实现Java线程之... 查看详情

java内存模型

声明:转载自茶轴的青春的博客??网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。... 查看详情

02java内存模型

java内存模型1、JVM内存区域方法区:类信息、常量、static、JIT(信息共享)java堆:实例对象GC(信息共享)OOMVMstack:JAVA方法在运行的内存模型(OOM)PC:java线程的私有数据,这个数据就是执行下一条指令的地址Nativemethodstack:月JVM的native... 查看详情

java内存模型(代码片段)

1、简介    Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。    如果你想设计表现良好的并发程... 查看详情

jvm内存模型

转自:http://gityuan.com/2016/01/09/java-memory/#section一、内存模型Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存... 查看详情

来,了解一下java内存模型(jmm)

网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内... 查看详情

java内存模型(代码片段)

Java内存模型Java内存模型硬件内存模型多CUP缓存产生的同步问题CPU指令重排Java内存模型线程通信中可能存在的问题并发三要素可见性原子性有序性Java内存模型参考视频:https://www.bilibili.com/video/BV1F64y1B7sV参考博客:https://z... 查看详情

java内存模型(代码片段)

Java内存模型Java内存模型硬件内存模型多CUP缓存产生的同步问题CPU指令重排Java内存模型线程通信中可能存在的问题并发三要素可见性原子性有序性Java内存模型参考视频:https://www.bilibili.com/video/BV1F64y1B7sV参考博客:https://z... 查看详情

java内存模型

为何需要java内存模型(JavaMemoryModel,JMM):  用于屏蔽各种操作系统和硬件之间的内存访问差异,使得java能够在各种平台下能够达到一致的运行结果。java内存模型(虚拟机内存):  1、主内存:所有的变量都存储在主内存... 查看详情

全面理解java内存模型

Java内存模型即JavaMemoryModel,简称JMM。JMM定义了Java虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了... 查看详情

转深入理解java内存模型

提纲java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。本文大致分三部分:重排序与顺序一致性;三个同步原语(lock,volatile,final)的内存语义,重排序规则... 查看详情

java并发编程--java内存模型

Java内存模型前面讲到了Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存... 查看详情

从cpu讲起,深入理解java内存模型!

Java内存模型,许多人会错误地理解成JVM的内存模型。但实际上,这两者是完全不同的东西。Java内存模型定义了Java语言如何与内存进行交互,具体地说是Java语言运行时的变量,如何与我们的硬件内存进行交互的。而JVM内存模型... 查看详情

java内存模型

Java内存模型(JavaMemoryModel,JMM),Java虚拟机规范中定义的来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问结果。1、主内存与工作内存Java内存模型的主要目标是定义程序中... 查看详情