并发编程相关
——————————————————————————————————
0、我们常说的JVM内存模型指的是JVM的内存分区;
而Java内存模型是一种虚拟机规范。
(实现内容会有交互部分,不代表这两个概念相关。)
为什么要有JMM?
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和 *** 作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。
1、一个线程对应一个工作内存,而不是一个cpu核心的高速缓存对应一个工作内存。
(高速缓存实际还是个小型的共享区域)
2、《深入理解Java虚拟机》中认为,如果一定要勉强对应起来的话,从变量、主内存、工作内存的定义来看,主内存主要对应于Java堆中的对象实例数据部分。工作内存则对应于虚拟机栈中的部分区域。
1)关于主内存:
堆中的对象数据才是共享使用并可变的数据,
方法区等区域虽也共享,但其中数据基本不会变,
而栈相当于一个方法调用期间的临时存储区,并且一个线程一份本身不会产生线程安全问题
2)关于工作内存:
就是临时存储局部变量以及共享变量的拷贝来作运算的地方,一个线程一个,所以栈本身包含这部分功能,并且栈不只有这部分功能。
3、JMM和JVM的区别:
0)JVM内存模型指的是JVM的内存分区;
而Java内存模型是一种虚拟机规范。
1)是完全不同的概念,
jmm关心的是数据以及数据在不同层次内存中的使用,
jvm关心的java运行环境在内存中的结构和运行机制。
2)讨论jmm时,不考虑jvm的堆栈结构细节;
讨论jvm时,不考虑jmm的内存层次细节,把主存和高速缓存看成一块整体。
3、在工作内存中会存在两个空间,一份与主存结构相似,一份是jvm的数据栈。
这两者也构成缓存关系。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)