码迷,mamicode.com
首页 > 编程语言 > 详细

java内存模型

时间:2018-01-12 01:52:08      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:描述   关联   线程   垃圾回收   区域   jmm   类成员变量   结构   地方   

几个概念

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 原则为准。

 

java内存模型

标签:描述   关联   线程   垃圾回收   区域   jmm   类成员变量   结构   地方   

原文地址:https://www.cnblogs.com/longsanshi/p/8271019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!