根据主题,如果在 C/C++ 中很容易找到缓存行大小并在开发高效的 MT 代码时处理这个问题,Java VM 如何处理这个问题?
干杯
根据主题,如果在 C/C++ 中很容易找到缓存行大小并在开发高效的 MT 代码时处理这个问题,Java VM 如何处理这个问题?
干杯
一般不会。你必须自己解决这个问题。如果它真的很重要,您可能必须使用 JNI 来获取有关系统的低级详细信息。
另一方面,Java 从一开始就支持该语言,从而使编写 MT 应用程序变得容易。
Java 很有可能从 Java 8 开始处理这个问题 。JEP 142指出:
当两个不同内核正在使用的两个内存位置最终位于同一高速缓存行并且至少一个内核正在执行写入时,就会发生内存争用。对于高度竞争的内存位置,这可能是一个严重的性能和可伸缩性问题。此增强的目的是避免内核之间的内存争用,至少在我们可以在开发过程中轻松识别的字段上。
有证据表明这确实发生了,而不是汽化件。