首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    最新java内存模型_java内存模型

    Java内存模型 Java内存模型是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助。 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。 1.1. Java内存模型指的就是Runtime Data Area(运行时数据区),即程序执行期间用到的数据和相关信息保存区。 1.2. Java内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。结构如下图: 1.2.1. PC程序计数器: l 每个线程对应有一个程序计数器。 Java内存模型工作示意图 1) 首先类加载器将Java代码加载到方法区 2) 然后执行引擎从方法区找到main方法 3) 为方法创建栈帧放入方法栈,同时创建该栈帧的程序计数器

    1.6K10编辑于 2022-09-08
  • 来自专栏全栈程序员必看

    java内存模型_简述java内存模型

    什么是JMM   JMM即为JAVA 内存模型java memory model)。 Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经成熟和完善起来。    此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的,如果非要对应起来,主内存对应的是Java堆中的对象实例部分,工作内存对应的是栈中的部分区域,从更底层的来说,主内存对应的是硬件的物理内存 更多的时候,使用java的happen-before规则来进行分析。   模型特征   原子性:例如上面八项操作,在操作系统里面是不可分割的单元。 因为JMM的工作内存和主内存之间存在延迟,而且java会对一些指令进行重新排序。

    1.6K21编辑于 2022-10-03
  • 来自专栏卯金刀GG

    高并发Java3):Java内存模型和线程安全

    网上很多资料在描述Java内存模型的时候,都会介绍有一个主存,然后每个工作线程有自己的工作内存。数据在主存中会有一份,在工作内存中也有一份。工作内存和主存之间会有各种原子操作去进行同步。 但是由于Java版本的不断演变,内存模型也进行了改变。本文只讲述Java内存模型的一些特性,无论是新的内存模型还是旧的内存模型,在明白了这些特性以后,看起来也会更加清晰。 1. 这个要从cpu指令说起,Java中的代码被编译以后,最后也是转换成汇编码的。 3. 可见性 可见性是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。 可见性问题可能有各个环节产生。 接下来看一个Java虚拟机层面产生的可见性问题 问题来自于一个Blog 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

    60210发布于 2019-07-25
  • 来自专栏码代码的陈同学

    Java内存模型

    Java内存模型(简称JMM)指定了JVM如何利用计算机内存(RAM)进行工作。JMM与整个计算机的模型类似,这个模型自然也包含内存模型,即Java内存模型(AKA)。 由于最初的JMM无法胜任工作,因此在Java 1.5中对JMM进行了升级,该版本在Java 8中依然在使用。 两个线程的 Local Variable 2 都指向堆中的共享对象 Object3,两个引用分别存储在每个线程的线程栈中。 注意,Object3以成员变量的形式拥有Object2和Object4的引用。两个线程可以通过Object3的成员变量访问到Object2和Object4。 硬件内存结构 当代硬件内存结构与JVM内部的内存模型稍有不同。为了理解JMM如何与其打交道,知晓硬件内存结构十分重要。本部分描述了通用硬件内存结构,后续将讲述JMM如何与之协同工作。

    1.2K60发布于 2018-07-25
  • 来自专栏bit哲学院

    Java内存模型

    参考链接: Java中的JVM的关闭挂钩 (原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多 简介      2.堆和栈    3.本机内存    4.防止内存泄漏    1.JMM简介         i.内存模型概述       Java平台自动集成了线程以及多处理器技术,这种集成程度比Java 3)可见性、可排序性     Java内存模型的两个关键概念:可见性(Visibility)和可排序性(Ordering)     开发过多线程程序的程序员都明白,synchronized关键字强制实施一个线程之间的互斥锁 ,但是最终会发生,也就是说,Java内存模型中的可见性的特性主要是针对线程和线程之间使用内存的一种规则和约定,该约定由JMM定义。       【*:这里讨论的排序是最底层的内存里面执行的时候的NativeCode的排序,不是说按照顺序执行的Java代码具有的有序性质,本文主要分析的是JVM的内存模型,所以希望读者明白这里指代的讨论单元是内存

    91110发布于 2020-12-01
  • 来自专栏无题~

    Java内存模型

    Java内存模型规定了所有的变量都存储在主内存中 每条线程还有自己的工作内存 线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝 线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存 -不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主- 存之间进行数据同步进行

    57610编辑于 2022-02-19
  • 来自专栏在周末的专栏

    Java内存模型

    3内存系统的重排序:由于处理器使用缓存和读/写缓冲区,缓存可能会改变写入变量提交到主内存中的次序,使得加载和存储操作看上去是乱序执行。    Java编译器、处理器都会保证单线程下的as-if-serial语义。 x.finalField = v; StoreStore; sharedRef = x; 双重检查锁定模型   双重检查锁定代码: 1 public class DoubleCheckLock 、2)初始化实例、3)把instance指向内存空间。      参考资料   《Java内存访问重排序的研究》https://tech.meituan.com/java-memory-reordering.html     《java并发编程的艺术》   《就是要你懂

    87241发布于 2019-09-11
  • 来自专栏工具使用

    Java内存模型

    什么是Java内存模型 java内存模型(JMM)全称为Java Memory Model,是java虚拟机为了java程序能够正常运行而制定的一套规范,规范中规定了JVM中的数据如何与RAM的数据进行交互 Java内存模型是怎样的 我们知道,在Java中,实例字段、静态字段和构成数组对象的元素是线程共享的,但局部变量与方法参数是线程私有的,不会被共享。 那在这里呢,Java 内存模型就定义了 8 种操作和 8 个规则。 回头想想,JMM 是一套规则呀,它只会给你定义规范,模型,具体的实现自己玩去!理解这一点很重要。 Java 内存模型只要求上述操作必须按顺序执行,而没有保证必须是连续执行。 Java 内存模型定义的 8 种操作,就要求虚拟机的实现每一步都必须是原子性的,即不可分割的。

    79520发布于 2020-08-19
  • 来自专栏Java架构师必看

    Java内存模型

    Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 文章目录 Java内存模型(JMM)的介绍 内存模型抽象结构 哪些是共享变量 JMM抽象结构模型内存与工作内存 内存间交互操作 内存模型三大特性 1. 原子性 2. 可见性 3. 传递性 Java内存模型(JMM)的介绍 什么是线程安全?在<<深入理解Java虚拟机>>中看到的定义。 如果程序员不能理解Java的共享内存模型在编写并发程序时一定会遇到各种各样关于内存可见性的问题。 Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值来实现可见性的。

    53610发布于 2021-07-14
  • 来自专栏IT技术精选文摘

    Java内存模型

    Java的世界也有属于它自己的内存模型Java内存模型,即Java Memory Model,简称JMM。 由于Java被定义成一种跨平台的语言,所以在内存的描述上面也要能是跨平台的,Java虚拟机试图定义一种统一的内存模型,能将各种底层硬件及操作系统的内存访问差异进行封装,使Java程序在不同硬件及操作系统上都能达到相同的并发效果 Java内存模型具有三个特性:原子性、可见性和有序性。 可见性,在java内存模型中,简单说如果一条线程更改了共享变量的值,而其他线程能马上知道这个更改,我们则说这个变量具有可见性。 JMM可以说是Java的基础,它的定义将直接影响JVM及java多线程实现的机制,要想深入了解多线程并发中的相关问题现象,对Java内存模型的深入研究是必不可少的。

    1.2K100发布于 2018-01-30
  • 来自专栏Java成长之路

    Java内存模型

    一、硬件的内存模型和指令重排序 在讲解java虚拟机的内存模型之前,我们先了解一下硬件的内存模型和指令重排序。 不同架构的屋里机器可以拥有不一样的内存模型,而Java虚拟机也有自己的内存模型,并且与硬件的缓存的访问操作比较类似。 二、Java内存模型 Java虚拟机中视图定义一种Java内存模型Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果 2.3 Java内存模型的三大特征 介绍完Java内存模型的相关操作和规则,我们再整体回顾一下这个模型的特征。 Java内存模型是围绕着在并发过程中如何处理原子性、 可见性和有序性这3个特征来建立的,我们逐个来看一下哪些操作实现了这3个特性。

    99210发布于 2018-09-29
  • 来自专栏静默虚空的博客

    Java 内存模型

    本文以及示例源码已归档在 javacore Java 内存模型Java Memory Model),简称 JMM。 二、Java 内存模型 内存模型 这个概念。我们可以理解为:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。不同架构的物理计算机可以有不一样的内存模型,JVM 也有自己的内存模型。 JVM 中试图定义一种 Java 内存模型Java Memory Model, JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序 在各种平台下都能达到一致的内存访问效果。 但 Java 内存模型只要求上述操作必须按顺序执行,而没有保证必须是连续执行。 三、Java 内存模型规则 内存交互操作的三大特性 上文介绍了 Java 内存交互的 8 种基本操作,它们遵循 Java 内存三大特性:原子性、可见性、有序性。

    1.1K20发布于 2019-12-30
  • 来自专栏全栈程序员必看

    Jmm内存模型_java jvm内存模型

    JMM(Java内存模型)源于物理机器CPU架构的内存模型,最初用于解决MP(多处理器架构)系统中的缓存一致性问题,而JVM为了屏蔽各个硬件平台和操作系统对内存访问机制的差异化,提出了JMM的概念。 Java内存模型是一种虚拟机规范,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式 2、JVM是运行时内存模型 在JVM内部使用java内存模型内存氛围线程栈和堆,Java 虚拟机中运行的每个线程都有自己的线程堆栈。线程堆栈包含有关线程调用哪些方法以到达当前执行点的信息。 3、JMM内存模型和JVM运行时内存模型的关系 Java运行时内存模型和计算机物理内存结构是不一样的。计算机物理内存结构并不区分栈和堆。在物理内存结构中,栈和堆都位于主存中。

    70810编辑于 2022-10-02
  • 来自专栏每天学Java

    Java内存模型

    Java内存模型(Java Memory Model,JMM)的定义是Java虚拟机试图实现Java程序在各种平台下都能达到一致的内存访问效果。” ? 01 — Java内存模型 上面对于内存模型的描述可能会有不正之处,希望大家带着批判的眼光去看这篇文章。 因此Java虚拟机试图定义Java内存模型去屏蔽各种内存和操作系统的内存访问差异,以实现Java程序在各种平台下都能达到一致的内存访问效果。 在JDK1.5发布后,Java内存模型已经成熟和完善起来了。 所以我们提到的JMM,一般指的是JDK 5 开始使用的新的内存模型 Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝

    67220发布于 2020-06-02
  • 来自专栏吉林乌拉

    Java内存模型

    Java虚拟机中定义了一种内存模型也就是JMM。目的是屏蔽各种硬件和操作系统的内存差异,以解决Java跨平台时能达到统一的内存访问效果。下面我们了解一下在JMM中内存是怎么划分的。 主内存与工作内存 在JMM中有一个规定就是所有变量都必须存储在主内存中。主内存也就是虚拟机内存的一部分区域。除此之外,每一个线程都有自己独立的工作内存。线程工作内存与主内存的区别是? 不同线程与线程间的是无法直接访问对方工作内存中的变量的。如果某一个线程需要访问其它线程工作内存中的变量时,它们只能通过主内存来完成。下图是线程与工作内存、主内存之间的关系图。 ? 上述所说的主内存和工作内存与并不是我们常说的虚拟机中的堆、 栈、 方法区等。它们并不是一个内存概念。为了方便理解我们可以认为主内存就是虚拟机堆中的存储对象实例的内存,而工作内存就是虚拟机栈中的内存。 不允许一个变量从主内存读取了但工作内存不接受,或者从工作内存发起了同步但主内存不接受的情况。 不允许变量在工作内存中改变了之后不同步到主内存中。

    56420发布于 2019-08-14
  • 来自专栏shysh95

    Java内存模型

    Java内存模型我们大致会分为两篇来讲,主要解决一下问题: 为什么需要并发处理 CPU高速缓存 缓存一致性 什么是内存模型 Java内存和工作内存交互协议(原子性) Java内存模型-可见性 Java 内存模型-有序性 第6条和第7条我放在下一篇讲,话不多说,一起掀开Java高并发内容的第一章。 3. 缓存一致性 高速缓存虽然解决了硬件的速度一致性,但是同样也引入了缓存一致性问题。每个处理器都有自己的高速缓存,而这些处理器又共享同一主内存。 什么是内存模型 内存模型可以理解为在特定的操作协议下,对特定内存或高速缓存进行读写访问的过程抽象。不同架构的物理机器拥有不一样的内存模型,而Java虚拟机也有自己的内存模型。 5. Java内存模型 Java虚拟机在工作时也有自己的主内存,每个线程有自己的工作内存,这就好比CPU高速缓存和物理机主内存一样,工作内存也是为了获得更好的执行速率。

    58110发布于 2021-03-16
  • 来自专栏技术知识总结

    Java内存模型

    Java 内存模型的作用《Java虚拟机规范》中曾试图定义一种“Java内存模型”(Java Memory Model,JMM)来屏蔽各种硬件和操作系统的内存访问差异, 以实现让 Java 程序在各种平台下都能达到一致的内存访问效果 主内存 & 工作内存Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。 注意, Java 内存模型只要求上述两个操作必须按顺序执行, 但不要求是连续执行。 先行发生原则先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则。 参考资料《深入理解Java虚拟机》第 12 章:Java 内存模型与线程 12.3 Java 内存模型

    90330编辑于 2023-04-08
  • 来自专栏同步文章

    ## java内存模型

    java内存模型 happens-before 在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。 当操作3的条件判断为真时,就把该计算结果写入变量i中。 对操作3和4做了重排序。重排序在这里破坏了多线程程序的语义! 2)根据volatile规则,2 happens-before 33)根据happens-before的传递性规则,1 happens-before 4。 volatile写-读的内存语义 volatile写的内存语义:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。 volatile读的内存语义如下:当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。

    33410编辑于 2022-10-25
  • Java内存模型

    Java内存模型1.硬件的效率一致性在多线程处理问题和提高计算机处理效率之间的因果关系看似是理所当然的,但是其中还存在一定差距。 2.Java内存模型1.内存间交互 Java内存模型规定了所有的变量都存储再主内存中,每条线程都有自己的工作内存,保存了该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中完成。 ·write(写入) : 作用于主内存的变量, 它把store操作从工作内存中得到的变量的值放入主内存的变量中 现代设计将Java内存模型的操作简化为read、 write、 lock和unlock 四种, 但这只是语言描述上的等价化简, Java内存模型的基础设计并未改变 。 0: getstatic #13; //Field race:I 获取值并压入操作数栈3: iconst_1 将数字1压入操作数栈4: iadd5: putstatic #13; //Field

    27010编辑于 2024-12-22
  • 来自专栏格姗知识圈

    JVM内存结构、Java内存模型Java对象模型

    比如本文我们要讨论的JVM内存结构、Java内存模型Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。 可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞的不是太清楚。 Java内存模型 Java内存模型看上去和Java内存结构(JVM内存结构)差不多,很多人会误以为两者是一回事儿,这也就导致面试过程中经常答非所为。 这就是一个简单的Java对象的OOP-Klass模型,即Java对象模型。 总结 我们再来区分下JVM内存结构、 Java内存模型 以及 Java对象模型 三个概念。 JVM内存结构,和Java虚拟机的运行时区域有关。 Java内存模型,和Java的并发编程有关。 Java对象模型,和Java对象在虚拟机中的表现形式有关。

    1.4K32发布于 2019-07-19
领券