课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
JMM是我们在学习java编程开发语言的时候需要掌握的技术要点之一,下面我们就一起来了解一下JMM的核心知识点都有哪些。希望通过对本文的阅读,大家对于java编程开发有更多的了解。
什么是JMM
JMM即为JAVA内存模型(javamemorymodel)。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在JVM中将变量存储到内存和从内存中取出变量这样的底层细节的实现规则。它其实就是JVM内部的内存数据的访问规则,线程进行共享数据读写的一种规则,在JVM内部,多线程就是根据这个规则读写数据的。注意,此处的变量与Java编程里面的变量有所不同步,它只是包含了实例字段、静态字段和构成数组对象的元素,但不包含局部变量和方法参数(局部变量和方法参数线程私有的,不会共享,当然不存在数据竞争问题)(如果局部变量是一个reference引用类型,它引用的对象在Java堆中可被各个线程共享,但是reference引用本身在Java栈的局部变量表中,是线程私有的)。为了获得较高的执行效能,Java内存模型并没有限制执行引起使用处理器的特定寄存器或者缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化措施。
JMM和JVM有什么区别
JVM:Java虚拟机模型主要描述的是Java虚拟机内部的结构以及各个结构之间的关系,Java虚拟机在执行Java程序的过程中,会把它管理的内存划分为几个不同的数据区域,这些区域都有各自的用途、创建时间、销毁时间
JMM:Java内存模型主要规定了一些内存和线程之间的关系,描述java虚拟机如何与计算机内存(RAM)一起工作
JMM中的主内存、工作内存与jJVM中的Java堆、栈、方法区等并不是同一个层次的内存划分,
JMM核心知识点
Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:JMM规定了所有的变量都存储在主内存(MainMemory)中。每个线程还有自己的工作内存(WorkingMemory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,所以看起来如同直接在主内存中读写访问一般)。不同的线程之间也无法直接访问对方工作内存中的变量,线程之间值的传递都需要通过主内存来完成。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。