计算机具有RAM内存,但它也具有更小,更快的CPU内存缓存。 Java内存模型保证在访问变量volatile
时刷新CPU内存缓存,但由于我们只在单个线程的单个类中使用该变量变量,因此JIT不会仅仅优化它。在Java中,如何刷新CPU内存缓存以便从RAM内存中检索最新内容?
要(在某一点时,我们调用了Thread.sleep(只表现)足够长的时间)诊断的错误,我们需要能够做这样的事情(而不是睡眠()):
System.clearCpuCache();
什么是最简单和最可靠的方法来实现这样的方法?它应该保证它不会JIT优化掉缓存刷新。 我们只能在启用JIT的情况下重现我们的错误,因此禁用JIT不是一种选择。
进入和退出'synchronized'块也应努力 – 2012-03-06 11:20:32
我从来没有听说过的JIT优化远离易失性写入。你有任何文件证明它会这么做吗? – Johannes 2012-03-06 11:39:20
@Johannes完全没有证据,只是怀疑:) – 2012-03-06 13:31:22