强制JVM缓存线程的变量

时间:2015-06-03 17:38:30

标签: jvm volatile jvm-arguments memory-barriers

有没有办法告诉JVM尽可能长时间地缓存线程的变量,除非使用内存障碍或volatile变量,否则永远不会更新它们? (用于测试)

1 个答案:

答案 0 :(得分:1)

它并不是一个线程局部的变量缓存,它会导致像永不终止的条件循环这样的着名效果。
如果它可以证明变量没有改变/不需要观察负载之间的并发变化,那么编译器可以消除冗余负载。

许多并发失败也不一定依赖于查看过时值,它们也可能由于看到新值无序而发生。我想我已经读过一些关于经过修改的研究虚拟机的内容,它会对生成的代码进行合法但程序员恶意的转换,以引发并发失败。

您可以尝试的是增加所有内联限制和代码缓存大小,并希望尽可能多地编译成大量代码,并且编译器会尽可能多地消除负载。