机器是双核的,操作系统使用多处理器内核。为了运行一些性能评估,我想将JVM的线程相关性设置为单个内核。然而,我担心我会得到偏差的性能测量结果,因为JVM可能不知道它现在被约束到单个核心,但仍然使用多处理器基元来进行线程同步和垃圾回收。尽管可以从命令行调整垃圾回收器,但这不可能用于线程同步。如何告诉Hotspot JVM是否使用单处理器或多处理器线程同步?
现在,JVM主要为其线程使用(*)OS线程。所以也许这个问题应该是“Do OSes(Windows/Linux)在多线程应用程序中使用正确的同步原语,它们通过设置相应进程的线程相似性来约束使用单个内核?”
(*)这在Windows上并不完全正确,在调用操作系统之前,JVM自行旋转。该行为可以通过-XX:+ UseSpinning和-XX:PreBlockSpin设置进行控制。