我知道这是自动完成的 - 访问频率越高的数据存储在离处理器更近的位置。但是我能否使用Java语法来影响它们的放置呢? 我的理解是,volatile
会将数据放置在三级缓存或RAM中,因为它对所有线程都可见,这是正确的吗?
我知道这是自动完成的 - 访问频率越高的数据存储在离处理器更近的位置。但是我能否使用Java语法来影响它们的放置呢? 我的理解是,volatile
会将数据放置在三级缓存或RAM中,因为它对所有线程都可见,这是正确的吗?
Java虚拟机是Java平台的基石。它是技术的组成部分,负责实现其硬件和操作系统无关性、编译后的代码大小小以及保护用户免受恶意程序侵害。
Java虚拟机是一台抽象的计算机。它与真实的计算机类似,在运行时具有指令集并操作各种内存区域。使用虚拟机实现编程语言相当常见;最著名的虚拟机可能是UCSD Pascal的P-Code机器。
Java虚拟机甚至不需要可访问的寄存器或高速缓存。从规范的角度来看,图灵机完全可以实现符合Java虚拟机规范的要求。这种行为是无法控制的。
如果 CPU 读取对象的字段,则该对象将被拉入 L1d,这与字段是否易失无关。
无论字段被访问一次还是多次,它都会最终进入 L1d。除非您有一个非暂态的载入/存储;但是此行为从 Java 中无法访问。
易失可以防止编译器和 CPU / 内存子系统级别上的指令重排序。在 X86 的情况下,由于 X86 的 TSO 内存模型,易失性读取是免费的(获取语义)。易失性写入通过停止前端执行负载直到存储缓冲区已被耗尽来实现。这样可以防止较旧的存储与不同地址的较新加载重新排序。
更多信息请参见: https://shipilev.net/blog/2014/on-the-fence-with-dependencies/