title: Java 内存模型_1
date: 2017-01-15 17:11:02
tags: [JMM]
categories: [Programming,Java]
概述
本文记录 Java 中的内存模型的基础部分1。
本篇作为学习 Java 内存模型基础部分的笔记,加上些许自己的理解和解释.
为什么需要理解 Java 内存模型
结论:并发产生的内存可见性问题.
并发编程中的两个关键问题:
线程之间如何通行(以何种机制来交换信息)
线程之间如何同步
已有的通信机制:
共享内存: 线程之间共享程序的公共状态,线程之间通过读写内存中的公共状态来隐式进行通信.
消息传递: 在这种模型中,线程之间没有公共状态,线程之间必须通过发送消息显式地通信.
同步,指的是控制不同线程之间操作发生的相对顺序的机制:
在共享内存模型中,程序员必须显式的指定某个方法或者某段代码需要在线程之间互斥执行.
在消息传递的模型里,由于消息的发送必须在消息的接收之前,因此,同步是隐式进行的.
java 采用的是共享内存模型,而 java 线程之间的通信总是隐式进行,整个通信过程对程序员完全是透明的.
对于 java 程序员而言,如果不了解 java 内存模型,在编写多线程程序的时候,就会遇到各种各样的内存可见性的问题.所以,对 java 的内存模型需要有一定的了解.
Java 采用的共享内存模型是什么样的
Java 采用的是共享内存模型作为线程间的通信机制.
共享内存: 堆内存,在 java 中,所有的 实例域,静态域和数组元素 存储在堆内存中,堆内存在线程之间共享.
局部变量,方法定义的参数和异常处理参数,不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响.
Java 线程之间的通