Geo*_*met 2 java concurrency volatile synchronized
计算机具有RAM内存,但它也具有小巧,快速的CPU内存缓存.Java内存模型保证在访问变量时刷新CPU内存缓存volatile,但由于我们只在单个线程中的单个类中使用该volatile变量,因此不确定JIT是否只是优化它.
为了诊断一个bug(当我们在某个时刻调用Thread.sleep()足够长时才会出现这个bug),我们需要能够做这样的事情(而不是sleep()):
System.clearCpuCache();
实现这种方法的最简单,最可靠的方法是什么?它应该保证它不会JIT优化缓存刷新.我们只能在启用JIT的情况下重现我们的错误,因此禁用JIT不是一种选择.
你一般不能.除性能外,缓存的存在对应用程序是透明的.这也适用于多处理器系统,只要缓存系统是"缓存一致的",这实际上是当今使用的所有平台.
因此,你的错误在其他地方.
像volatile和synchronized块这样的东西不会影响缓存一致性本身,而是影响寄存器优化,使用原子指令(包括刷新存储缓冲区,这与缓存不同!),等等.这些是你应该看的东西(好吧,鉴于你的描述中缺乏细节,很难说,但作为第一个猜测..),而不是试图刷新缓存.
| 归档时间: | 
 | 
| 查看次数: | 1893 次 | 
| 最近记录: |