在学习JAVA多线程时,发现多线程内容是建立在JAVA内存模型上的。JAVA内存模型的上次主要更改在JAVA 5版本。附上两个资料链接。其中包含一个内存模型论文,有时间将会在本篇博客或者另外的博客慢慢更新。
https://www.cs.umd.edu/~pugh/java/memoryModel/
https://dl.acm.org/doi/abs/10.1145/1047659.1040336
每个系统的硬件软件接口可以通过多线程访问共享内存的都需要一个内存模型。
- 对于机器语言来说,内存模型会决定硬件的优化操作。
- 对于高级语言来说,内存模型 会影响编译器生成字节码,虚拟机如如何使用字节码生成native code,还有硬件会如何优化native code。
- 对于程序员来说,内存模型决定了如何编写程序才是正确的。
在04年之前已经有了很多对内存模型的研究,但是他们都在硬件层面而非在编程语言层面。
相比于硬件层面,编程语言层面主要面临下面两个困难:
- 编程语言自身有很强的安全性和保障性的属性需要被遵守
- 编译器执行全局的能力,为了改造程序而进行的微妙分析本质上是无限的,而硬件系统往往使用
执行优化的范围更加有限。