返回顶部
首页 > 资讯 > 后端开发 > Python >JVM 运行时数据区与JMM 内存模型
  • 148
分享到

JVM 运行时数据区与JMM 内存模型

JVM 运行时数据区JMM 内存模型 2022-11-13 13:11:27 148人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1. JVM 运行时数据区2. JMM 内存模型硬件内存模型JMM3. 可见行与 volatile 关键字1. JVM 运行时数据区 JVM运行时数据区可以分为元空间,堆,虚拟机

1. JVM 运行时数据区

JVM运行时数据区可以分为元空间,堆,虚拟机栈,本地方法栈,程序计数器五大块。

  • 元空间(方法区):存放类模版对象,是线程共享的区域,在磁盘上,一般不会GC
  • 堆空间:线程共享的区域,对象创建与GC的主要阵地
  • 虚拟机栈:线程私有的,基本组成单位是栈帧,每个栈帧对应一个方法,栈帧组成如下
    • 局部变量表:存放方法变量信息
    • 操作数栈:方法运行的区域
    • 动态链接:指向方法模板对象,与虚方法表一起实现方法重写
    • 返回地址:方法的返回地址
  • 本地方法栈:线程私有,本地方法的执行区域
  • 程序计数器:线程私有,负责在线程上下文切换的过程中记录线程执行到了哪个位置

2. JMM 内存模型

硬件内存模型

通常情况下,当CPU需要读取主存时,它会将主存的部分读到CPU缓存中或者内部寄存器中,然后在寄存器中执行操作。当CPU需要将结果写回到主存中去时,它会将内部寄存器的值刷新到缓存中,然后在某个时间点将值刷新回主存。

在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存,因此就会存在缓存一致性问题。为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、MESI等。

JMM

JMM内存模型将内容分为了线程私有内存与主内存两部分,其与我们之前提到的硬件内存模型的对应关系如下所示:

私有内存与主内存的交互由如下八种操作控制:

3. 可见行与 volatile 关键字

一言以蔽之,volatile 关键字通过内存屏障的形式来阻止指令重排,以维护变量的有序性与可见行。

一行代码到执行的过程中要经历以下的阶段:

volatile 关键字有如下两个作用:

  • 保证被 volatile 修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了被 volatile 修饰共享变量的值,新值总是可以被其他线程立即得知。
  • 禁止指令重排序优化

JVM中提供了四类内存屏障指令:

  • loadload:两个读取操作之间
  • storestore:两个写操作之间
  • loadstore:读写操作之间
  • storelosd:写读操作之间

到此这篇关于JVM 运行时数据区与JMM 内存模型的文章就介绍到这了,更多相关JMM 内存模型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JVM 运行时数据区与JMM 内存模型

本文链接: https://lsjlt.com/news/171262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JVM 运行时数据区与JMM 内存模型
    目录1. JVM 运行时数据区2. JMM 内存模型硬件内存模型JMM3. 可见行与 volatile 关键字1. JVM 运行时数据区 JVM运行时数据区可以分为元空间,堆,虚拟机...
    99+
    2022-11-13
    JVM 运行时数据区 JMM 内存模型
  • JVM内存模型/内存空间:运行时数据区
    目录JVM内存模型/内存空间① 程序计数器 (Program Counter Register)② Java虚拟机栈 (VM Stack)&n...
    99+
    2024-04-02
  • Java内存模型JMM与volatile
    目录1.Java内存模型2.并发三大特性2.1.原子性2.2.可见性2.3.有序性3.两个规则3.1.happens-before规则3.2.as-if-serial4.volati...
    99+
    2024-04-02
  • JAVA JVM运行时数据区详解
    目录一、前言二、运行时数据区整体概架构三、程序计数器四、虚拟机栈1、栈的特点2、栈帧的内部结构3、局部变量表4、操作数栈5、动态链接6、方法返回地址五、本地方法栈六、堆1、设置堆大小...
    99+
    2024-04-02
  • Java内存划分:运行时数据区域
    目录1. 程序计数器(线程私有)2. Java虚拟机栈(线程私有)(1) 概念(2) 下面我们来分析一段代码3. 本地方法栈(线程私有)4. Java堆(线程共享)5. 方法区(线程...
    99+
    2024-04-02
  • Java JVM运行时数据区(Run-Time Data Areas)
    目录1、官网概括2、图例和思维导图3、方法区(Method Area)4、堆(Heap)5、Java虚拟机栈6、 栈帧(Stack Frame)7、程序计数器(The pc Regi...
    99+
    2024-04-02
  • 如何进行JVM内存模型使用
    这篇文章给大家介绍如何进行JVM内存模型使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。你对JVM内存模型是否熟悉,这里和大家分享一下,主要包括栈和堆两部分内容,Java栈是与每一个线程关联的,JVM在创建每一个线程...
    99+
    2023-06-17
  • JVM中的运行时数据区域是哪些
    首先看图:java相关视频教程:java课程1.程序计数器(PC)是线程独享的。是一块较小的内存,是当前线程所执行的字节码的行号指示器,是Java虚拟机规范中唯一没有被规定OOM(OutOfMemoryError)的区域。2.Java虚拟机...
    99+
    2016-12-08
    java入门 JVM 运行时数据区域
  • 面试时必问的JVM运行时数据区详解
    目录前言正文1、运行时数据区(Run-Time Data Areas)1)程序计数器(Program Counter Register)2)Java虚拟机栈(Java Virtual...
    99+
    2024-04-02
  • Java并发编程之volatile与JMM多线程内存模型
    目录一、通过程序看现象二、为什么会产生这种现象(JMM模型)?三、MESI 缓存一致性协议 一、通过程序看现象 在开始为大家讲解Java 多线程缓存模型之前,我们先看下面的这一段代码...
    99+
    2024-04-02
  • Java内存区域与内存模型详解
    这篇文章主要介绍“Java内存区域与内存模型详解”,在日常操作中,相信很多人在Java内存区域与内存模型详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存区域与内存模型详解”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • java应用开发之JVM运行时内存分析
    目录1.JVM的运行时内存也叫JVM堆2.JVM新创建的对象3.新生代详解4.老年代详解5.永久代1.JVM的运行时内存也叫JVM堆 从GC的角度可以将JVM分为新生代,老年代,永久...
    99+
    2024-04-02
  • 深入浅出JVM内存数据区域
    JAVA程序运行于虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。虚拟机管理内存数据区域划分如下图:java学习视频推荐:java在线教程一、程序计数器(Program Count...
    99+
    2021-02-14
    java入门 JVM 内存 数据区域
  • Java运行时数据区域(内存划分)的深入讲解
    1. 程序计数器(线程私有) 程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器(切换线程后,能恢复到正确的执行位置). 2. Java虚拟机栈(线程私...
    99+
    2024-04-02
  • java中JVM运行时内存整理的示例分析
    这篇文章给大家分享的是有关java中JVM运行时内存整理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • Java并发编程之volatile与JMM多线程内存模型实例分析
    本篇内容主要讲解“Java并发编程之volatile与JMM多线程内存模型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程之volatile与JMM多线程内存模型实例分析”...
    99+
    2023-06-30
  • Java常见知识点中Jvm内存结构、Java内存模型、Java对象模型的区别是什么
    这篇文章将为大家详细讲解有关Java常见知识点中Jvm内存结构、Java内存模型、Java对象模型的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我们都知道,Java代码是要运行在...
    99+
    2023-06-05
  • C++程序内存栈区与堆区模型案例分析
    目录栈区:栈区代码演示:堆区:堆区代码演示:new操作符:new操作符代码演示:栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死&rdqu...
    99+
    2024-04-02
  • C++浅析内存分区模型概念与示例
    目录初识C++内存分区模型程序运行前内存分区代码示例初识C++内存分区模型 在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有...
    99+
    2024-04-02
  • JVM虚拟机内存模型与高效并发知识点有哪些
    这篇文章主要讲解了“JVM虚拟机内存模型与高效并发知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM虚拟机内存模型与高效并发知识点有哪些”吧!Java内存模型,即Java Me...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作