多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
JM屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。本地内存是一个抽象概念,它涵盖了缓存、写缓存区、寄存器以及其他的硬件和编译器优化。 在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。在多线程中重排序会对程序的执行结果有影响。 JSR-133内存模型采用happens-before的概念来阐述操作之间的内存可见性。happens-before会限制重排序以满足规则。 主要的happens-before规则有如下: * 程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。 * 监视器锁规则:对一个锁的解锁,happens-before与锁随后对这个锁的加锁。 * volatile变量规则:对一个volatile域的写,happens-before与任意后续对这个volatile域的读。 * 传递性:如果A happens-before B,且B happens-before C,那么A happens-before C。