这台机器是双核的,操作系统使用多处理器内核。为了运行一些性能评估,我希望将JVM的线程亲和性设置为单核。然而,我担心我会得到扭曲的性能测量,因为JVM可能没有意识到它现在被限制在单个内核上,但仍然使用多处理器原语进行线程同步和垃圾收集。虽然垃圾收集器可以从命令行调优,但这对于线程同步是不可能的。
现在,JVM的线程主要使用(*)OS线程。因此,也许问题应该是“OSes (Windows/Linux)在多线程应用程序中使用正确的同步原语吗?通过设置相应进程的线程亲和性,这些多线程应用程序只能使用单个内核。”
(*)在Windows上并非如此,在Windows中,JVM在调用操作系统之前会自动旋转。该行为可以通过-XX:+UseSpinning和-XX:PreBlockSpin设置进行控制。
发布于 2009-07-30 12:44:40
如果您只设置JVM的亲和性,那么结果将在某种程度上受到影响。即使JVM 100%地运行在单核机器上,OS内核和其他用户空间代码仍将使用额外的核心。这意味着更少的上下文切换开销,因此具有不同的性能特征。
我只会让第二个核心失效。假设您使用的是windows XP:通过添加以下内容编辑c:\boot.ini
/onecpu添加到boot options列表中,然后重新启动机器。
https://stackoverflow.com/questions/1200776
复制相似问题