有没有办法在 JVM 或 Dalvik 的运行时限制 CPU 使用百分比?

Is there a way to restrict CPU usage to a percentage during runtime for JVM or Dalvik?

我想问的是,在运行时是否有办法限制 JVM 或 Dalvik 中线程可访问的 CPU 的百分比?参见示例:

private void functionRunningInsideThread()
{
    // Do something

    // Lower access to CPU cycles

    // Do something else (with access to lower CPU cycles)

    // Remove CPU restrictions

    return;
}

简短回答:不,据我所知,没有可靠的方法。

更长的答案:这里(至少)有两个问题:

  1. 在传统的JVM中,一个线程暂停另一个线程的执行没有安全的方法,除非第二个线程正在合作;即它会定期检查是否应该暂停。

  2. 很难监视线程使用的时间百分比 CPU。理论上,您可以使用 ThreadMXBean API 获得线程的总 CPU 使用率。然而:

    • 可能没有货,
    • 即使是,从线程的总 CPU 使用率到给定时间段内的使用百分比也不是简单的。

但是,如果您愿意粗略一点,您可以让线程使用 ThreadMXBean.getCurrentThreadCPUTime 定期检查自己的 CPU 使用情况,并与使用 [=测量的运行时间进行比较=12=]。如果线程发现它正在使用太多 CPU,它可以简单地调用 Thread.sleep().

另请参阅:

  • Throttling CPU/Memory usage of a Thread in Java?