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

时间:2015-07-12 12:49:53

标签: java android jvm

我要问的是,在运行时是否有办法限制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 个答案:

答案 0 :(得分:2)

简短回答:没有办法可靠地做到这一点,AFAIK。

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

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

  2. 很难监控线程使用的CPU时间百分比。理论上,您可以使用ThreadMXBean API获取线程的总CPU使用率。但是:

    • 数量可能无法使用,
    • 即使是这样,从一个线程的总CPU使用率到给定时间段内的百分比使用情况也不是直截了当。
  3. 但是,如果您愿意做一些粗略的准备,可以让线程使用ThreadMXBean.getCurrentThreadCPUTime定期检查自己的CPU使用情况,并与使用System.getTimeMillis测量的经过时间进行比较。如果线程发现它正在使用很多CPU,则只需调用Thread.sleep()

    另见: