zoukankan      html  css  js  c++  java
  • 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 原则为准。

  • 相关阅读:
    smarty基础
    smarty变量
    Google的Python代码格式化工具YAPF详解
    性能监控工具YourKit
    Scala学习笔记2
    Scala介绍
    线段树
    字符串分割方法
    Trie树
    Scala 学习笔记
  • 原文地址:https://www.cnblogs.com/longsanshi/p/8271019.html
Copyright © 2011-2022 走看看