• java内存模型


    几个概念

    java内存结构,也叫jvm内存结构,也可以叫也就是运行时的数据区域

    内存模型

    1、内存结构,

    A、栈

    栈和线程紧密关联的。当创建线程的时候,会创建java栈,java栈又包含多个帧栈,方法运行的时候,信息就存在帧栈里面,比如局部变量,返回值,操作数等。Java栈数据不是线程共有的,所以不需要关心其数据一致性,也不会存在同步锁的问题

    B、堆

    存放对象实例,以及数组,垃圾回收主要针对的就是这个区域,这里的数据是线程共享的,所以不是线程安全的

    C、方法区

    类相关信息,例如类成员变量,方法名,等信息,当然包括类名,描述等信息,方法区还包括常量池,存放的是字符串,字面量等

    D、程序计数器

    由于java是多线程的,线程来回切换,程序计数器执行会指向帧栈的栈定,以表示程序执行到什么位置了。

    E、本地方法栈

    和栈相似,只不过执行的java外部的方法,比如c++的方法。

    2、内存模型

    java内存模型主要程序房屋变量的规则,也就是java虚拟机中的变量是如何存储到主存中,以及如何从主存中取到虚拟机中的这些细节。JMM规定了JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量,数据交换必须通过主存。

    Java内存模型是围绕着并发编程中原子性、可见性、有序性这三个特征来建立的,

    可见性,主内存中的数据修改,工作内存是可见的。立即知道。

    有序性,主要是针对多线程执行时候,线程的一些操作一些先后的规则,这就是before-happen。例如volatile修饰的变量,写操作先发生于读操作,

    所以衡量并发安全问题一切必须以happens-before 原则为准。

  • 相关阅读:
    Vue学习笔记-2
    versionCompare 版本号比较工具
    Vue学习笔记-1
    工作机会
    PAT题目AC汇总(待补全)
    sqli-labs-master 第二关+第三关+第四关
    sqli-labs-master 盲注+第五关+第六关
    Java面向对象--equeal和==
    Java面向对象--object
    Java面向对象--成员变量的初始值
  • 原文地址:https://www.cnblogs.com/longsanshi/p/8271019.html
Copyright © 2020-2023  润新知