1.java运行时内存的划分
栈与堆的区别:
- 栈内存存储的是局部变量,而对内存存储的是实体;
- 栈内存的更新速度快于堆内存,因为局部比纳凉的生命周期很短。
- 栈内存存储的变量生命周期一旦结束就会被释放,而堆内存存储的实体被垃圾回收机制不定时回收。
对每一个线程来说,栈是私有的,堆是共有的。
2.堆是共享的,关于堆中内存不可见问题
线程的共享变量存储在主内存中,每个线程都有一个私有的本地内存。它存储了该线程以读、写共享变量的副本。
java线程之间的通信由java内存模型控制(j简称JMM)。
JMM定义了线程和主内存之间的关系:
线程A无法直接与线程B进行通信,线程必须经过主内存。
线程对共享变量的操作必须在本地内存中进行,不能直接从主内存中读取。
java 通过volatile保证共享变量的可见性。
3.java运行内存与JMM的区别
JMM是一个抽象的概念,他描述了一组规则和规范,这个规范定义了一个线程对共享变量的写入对另一个线程是可见的。JMM就是围绕多线程通信及其相关的一系列通信建立的模型。
java的运行内存是具体的内存划分。