从Eclipse启动时为Java进程设置CPU关联

时间:2016-09-13 18:04:33

标签: java eclipse

有些第三方库会出于许可目的检查CPU数量,而没有明显的方法告诉他们"使用1核心"。

为了解决这个限制,我希望能够在此过程中尽早启动CPU关联。

有没有办法为从Eclipse中启动的进程设置CPU关联?我想保持工作流程相对相同,这意味着我仍然希望能够进行调试等。

如果这是唯一的解决方案,我可以修改程序,但我更喜欢依赖于JVM选项或Eclipse运行程序参数的解决方案。

1 个答案:

答案 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表示当前进程。