为了屏蔽各种硬件和操作系统的内存访问差异,JVM制定了一套JMM内存模型来实现同一套Java程序在不同平台上实现一样的运行效果。也就是一次编译到处运行跨平台的效果。

JVM内存分配概念

JVM两个重要的概念:堆(Heap)栈(Stack)

Java中Heap是运行时数据区,有垃圾收集器负责,它的优势的是动态分配内存,生命周期不必事先告诉编译器,在运行时动态分配内存,JVM垃圾收集器会自动回收不再使用的数据.缺点是:由于是在运行时分配的内存,所以存取速度相对较慢。

Java中的Stack比Heap存取速度快,仅次于寄存器,Stack中的数据可以是共享的。但是栈的缺点是生命周期在编译器就已经确定,缺乏灵活性,主要放一些基本类型的变量。

JMM要求调用栈和局本变量(本地变量)放在Stack上,对象放在Heap上。一个局部变量可以引用一个对象,而这个对象是放在Heap上。一个类可能有方法,方法中的局部变量也是放在线程栈上,即使这些方法所属的对象依然在Heap上。一个对象的成员变量可能会随着这个对象存放在Heap上,不管这个成员变量是基本类型还是引用类型,静态成员变量跟随类的定义一起放在Heap上。存放在堆上对象,可以被持有这个对象的线程访问。

当一个线程可以访问一个对象,它可以访问该对象的成员变量,如果两个线程同时调用一个对象的同一个方法,将会都访问该对象的成员变量,但是每个线程都有了该成员变量的私有拷贝。

Java 内存模型(Java Memory Model,JMM)相关推荐

  1. Java内存模型(Java Memory Molde,JMM)

    文章目录 1.Java内存模型(Java Memory Molde,JMM) 2. 多线程先行发生原则之happens-before 1.Java内存模型(Java Memory Molde,JMM) ...

  2. Java内存模型(Java Memory Model,JMM)

    导读 本文通过对JSR133规范的解读,详细的介绍JMM的核心理论,并将开发中常用的关键字的实现原来做了详细的介绍.通过本文读者可以了解到并发的一些基本理论,并对一些同步原语有了更深层次的理解.希望读 ...

  3. 第十六章:Java内存模型——Java并发编程实战

    一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...

  4. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  5. java内存 海子_Android 面试经验 - Java 内存模型 - Java 技术驿站-Java 技术驿站

    Java内存模型 目录 Java执行流程 Java文件被编译成字节码文件之后,由JVM中的类加载器进行加载,加载完毕之后,交由JVM的执行引擎执行.在程序执行的过程中,JVM会用一段空间来存储数据和相 ...

  6. 稀疏内存模型sparsemem memory model | 文章

    文章推荐 <sparsemem memory model>https://lwn.net/Articles/134804/ <Physical Memory Model>htt ...

  7. 从底层吃透java内存模型(JMM)、volatile、CAS

    前言 随着计算机的飞速发展,cpu从单核到四核,八核.在2020年中国网民数预计将达到11亿人.这些数据都意味着,作为一名java程序员,必须要掌握多线程开发,谈及多线程,绕不开的是对JMM(Java ...

  8. 高并发编程-重新认识Java内存模型(JMM)

    文章目录 从CPU到内存模型 内存模型如何确保缓存一致性 并发变成需要解决的问题 (原子性.可见性.有序性) 内存模型需要解决的问题 Java内存模型 JMM的API实现 原子性 synchroniz ...

  9. java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...

    JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据 ...

最新文章

  1. es6笔记2之解构赋值,rest和展开运算符
  2. 汇编原理实验 --类型统计(字母,数字,其他字符的个数)
  3. 【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)
  4. C++生成指定范围内的随机数
  5. win10开启oracle服务器配置,Windows环境(Win10)下安装、配置服务器类Oracle Database 11g Release 2...
  6. 深入理解Java虚拟机(第三版)-13.Java内存模型与线程
  7. Aptana Studio 介绍
  8. pytorch: 网络层参数初始化
  9. java 在某个时间段定时_Java 在某一个时间点定时执行任务(转载)
  10. Verilog语言入门学习(1)
  11. 工程初始化:报错... ...is exceeding the 65535 bytes limit
  12. Imagination和浙江大学信电学院签署合作协议,校企共创大学课程新篇章
  13. Android Jetpack 架构组件之 Room
  14. 指令,机器指令,指令周期,机器周期的辨析
  15. 值得 .NET 开发者了解的15个特性
  16. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-5联通3G功能调试支持
  17. 第十二章 牛市股票还亏钱—外观模式
  18. 房价租金预测总结笔记
  19. 永磁同步电机PMSM直接转矩滞环控制 采用三闭环控制:转速外环采用PI调节器,转矩环和磁链环经过滞环后得到PWM脉冲
  20. flink 入门(一)

热门文章

  1. 浅谈Linq to Sql 的不足
  2. python 多线程应用
  3. 字符编码详解及由来(UNICODE,UTF-8,GBK)
  4. ajax成功后没有执行函数,ajax不执行回调函数
  5. java GoF 的 23 种设计模式的分类和功能
  6. LeetCode 200. Number of Islands
  7. 【iOS】The run destination iPhone is not valid for Running the scheme .
  8. 【软件工程】滨江学院 李振宏 软件工程 考点整理
  9. java连接mysql数据库增删改查操作记录
  10. oracle数据库listener开启和关闭trace文件的方法