网站建设的基本需求有哪些,广告网络联盟,做外贸那个网站好,求个网址老哥们2021一#xff1a;为什么要有JMM#xff0c;它为什么出现#xff1f;
CPU的运行并不是直接操作内存而是先把内存里面的数据读到缓存#xff0c;而内存的读和写操作的时候会造成不一致的问题。JVM规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异…一为什么要有JMM它为什么出现
CPU的运行并不是直接操作内存而是先把内存里面的数据读到缓存而内存的读和写操作的时候会造成不一致的问题。JVM规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异以实现让Java程序再各种平台下都能达到一致性的内存访问效果。
二JMM是什么
JMM本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范通过这组规范定义了程序中尤其是多线程各个变量的读写访问方式并决定一个线程对共享变量的写入以及如何变成对另一个线程可见
三JMM作用和功能是什么
1通过JMM来实现线程和主内存之间的抽象关系 2屏蔽各个硬件平台和操作系统的内存访问差异以实现让Java程序在各种平台下都能达到一致性的内存访问效果。
四JMM规范下三大特性
1可见性是指当一个线程修改了某一个共享变量的值其他线程是否能够立即知道该变更JMM规定了所有的变量都存储在主内存 2原子性指一个操作是不可被打断的 3有序性编译器和处理器通常会对指令序列进行重新排序。多线程环境中线程交替执行由于编译器优化重排的存在可能出现乱序现象两个线程使用的变量能否保证一致性是无法确定的结果无法预测。
五JMM规范下多线程先行发生原则
1如果一个操作happens-before另一个操作那么第一个操作的执行结果将对第二个操作可见而且第一个操作的执行顺序排在第二个操作之前。 2如果两个操作之间存在happens-before关系并不意味着一定要按照happens-before原则制定的顺序来执行。如果重排之后的执行结果与按照happens-before关系来执行的结果一致那么这种重排序并不非法。
六JMM和volatile他们两个之间的关系