2009-07-29 67 views
2

机器是双核的,操作系统使用多处理器内核。为了运行一些性能评估,我想将JVM的线程相关性设置为单个内核。然而,我担心我会得到偏差的性能测量结果,因为JVM可能不知道它现在被约束到单个核心,但仍然使用多处理器基元来进行线程同步和垃圾回收。尽管可以从命令行调整垃圾回收器,但这不可能用于线程同步。如何告诉Hotspot JVM是否使用单处理器或多处理器线程同步?

现在,JVM主要为其线程使用(*)OS线程。所以也许这个问题应该是“Do OSes(Windows/Linux)在多线程应用程序中使用正确的同步原语,它们通过设置相应进程的线程相似性来约束使用单个内核?”

(*)这在Windows上并不完全正确,在调用操作系统之前,JVM自行旋转。该行为可以通过-XX:+ UseSpinning和-XX:PreBlockSpin设置进行控制。

回答

0

如果您只设置了JVM的亲和性,那么结果将在某种程度上倾斜。即使JVM在单核机器上运行100%,操作系统内核和其他用户空间代码仍然会使用额外的内核。这意味着更少的上下文切换开销,因此不同的性能特征。

我只是禁用第二个核心。假设你使用的是Windows XP:编辑c:\boot.ini加入

/onecpu 

boot options列表并重新启动计算机。