有些第三方库会出于许可目的检查CPU数量,而没有明显的方法告诉他们"使用1核心"。
为了解决这个限制,我希望能够在此过程中尽早启动CPU关联。
有没有办法为从Eclipse中启动的进程设置CPU关联?我想保持工作流程相对相同,这意味着我仍然希望能够进行调试等。
如果这是唯一的解决方案,我可以修改程序,但我更喜欢依赖于JVM选项或Eclipse运行程序参数的解决方案。
答案 0 :(得分:1)
看起来像这样:
How to use Java Native Access to set process affinity for processes besides Java.exe?
提供问题本身的解决方案,至少对于Windows。在这里复制后代:
private void setDesiredCpuAffinity() {
int pid = -1; // -1 means current process
AffinityKernel instance = (AffinityKernel) Native.loadLibrary("Kernel32", AffinityKernel.class);
int affinityMask = 7; // Use 3 CPUs
System.out.println(instance.SetProcessAffinityMask(new HANDLE(new Pointer(pid)), affinityMask));
}
private static interface AffinityKernel extends Kernel32 {
public boolean SetProcessAffinityMask(HANDLE hProcess, int dwProcessAffinityMask);
}
Per this:
SetProcessAffinityMask
的第一个参数是HANDLE hProcess
。
Per this:
hProcess = -1表示当前进程。