现让 Java 程序在各种平台下都能达到一致的并发效果,JMM 规范了 Java 虚拟机与计算机内存是如何协同工作的:规定了一个线
程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。
原始的 Java 内存模型存在一些不足,因此 Java 内存模型在 Java1.5 时被重新修订。这个版本的 Java 内存模型在 Java8 中仍然在
使用。
总结 java 内存模型做什么:它规范了 java 虚拟机与计算机内存是如何系统工作的,它规定了一个线程如何和何时,
可以看到的其他线程修改过后的共享变量的值,以及在必须是如何同步的访问共享变量。
1.8.1 堆栈的优缺点
对象的引用存在栈中,对象的实体(分配给对象的变量)存在堆中。栈(stack)和堆(heap)都是 java 用来在 RAM 中存放数据的地
方。JAVA 自动管理栈和堆,程序员不能直接设置栈或堆。
栈的优势:存取速度比堆要快。
栈的缺点:存在栈的数据大小和生存期必须是确定的,缺乏灵活性。
堆的优势:可以动态地分配内存大小,生存期也不必事先告诉编译器,Java 的垃圾收集器会自动收走这些不在实用的数据。
堆的缺点:由于运行时要动态分配内存,存取速度慢。
说明:两个线程使用 heap 中的同一个对象,两个线程拥有的是该对象的私有拷贝。
1.8.2 计算机硬件架构
cpu 寄存器
说明:cpu 与内存之间的高速缓存,将需要使用的使用拷贝到高速缓存中,执行结束后,将数据与内存中的数据同步一下。
解决了内存执行速度缓慢的问题。
(现代计算机硬件架构的简单图示)
多 CPU:一个现代计算机通常由两个或者多个 CPU。其中一些 CPU 还有多核。从这一点可以看出,在一个有两个或者多个 CPU
的现代计算机上同时运行多个线程是可能的。每个 CPU 在某一时刻运行一个线程是没有问题的。这意味着,如果你的 Java 程序
是多线程的,在你的 Java 程序中每个 CPU 上一个线程可能同时(并发)执行。
CPU 寄存器:每个 CPU 都包含一系列的寄存器,它们是 CPU 内内存的基础。CPU 在寄存器上执行操作的速度远大于在主存上执
行的速度。这是因为 CPU 访问寄存器的速度远大于主存。