为什么会有内存模型呢?
cpu的发展越来越快,内存更不上它的速度,为了更充分的利用资源,就出现了多核多线程的情况。多并发是个容易出错的环节,因此引入内存模型,保证数据的一致性。
什么是java内存模型呢?
Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。
而JMM就作用于工作内存和主存之间数据同步过程。他规定了如何做数据同步以及什么时候做数据同步。
运行时内存模型
1.线程私有区:
名称 | 说明 |
---|---|
程序计数器 | 记录正在执行的虚拟机字节码的地址 |
虚拟机栈 | 方法执行的内存区,每个方法执行时会在虚拟机栈中创建栈帧 |
本地方法栈 | 虚拟机的 native 方法执行的内存区 |
2.线程共享区:
名称 | 说明 |
---|---|
Java堆 | 对象分配内存的区域 |
方法区 | 存放类信息、常量、静态变量、编译器编译后的代码等数据 |
常量池 | 存放编译器生成的各种字面量和符号引用,是方法区的一部分 |
参考链接:https://www.jianshu.com/p/7a61930324b2
参考链接:https://www.hollischuang.com/archives/2550