Java中cpu负载的人工生成

Java中cpu负载的人工生成,java,android,cpu-usage,Java,Android,Cpu Usage,有没有一种简单的方法可以在Java中生成恒定的CPU负载?比如以60%的速度生成CPU负载。我认为这甚至是不可能的,因为: JVM解释代码的方式取决于实现 编译器和JVM可能会以依赖于实现的方式优化代码,当然,这样您可以运行不同于给定.class文件中字节码的字节码。 我们还没有测试过这一点,但它可能会大致起作用,以使您的应用程序以正确的比例工作和睡眠。类似于伪代码: load = 60; do forever time = current_system_time_ms() + load

有没有一种简单的方法可以在Java中生成恒定的CPU负载?比如以60%的速度生成CPU负载。

我认为这甚至是不可能的,因为:

JVM解释代码的方式取决于实现 编译器和JVM可能会以依赖于实现的方式优化代码,当然,这样您可以运行不同于给定.class文件中字节码的字节码。
我们还没有测试过这一点,但它可能会大致起作用,以使您的应用程序以正确的比例工作和睡眠。类似于伪代码:

load = 60;  
do forever
  time = current_system_time_ms() + load
  while (current_system_time_ms() < time)
     // just consume some time for 60 ms 
  end

  SLEEP(100 - load);  // sleep for 40 ms
end 

好的,你要求一个简单的方法,但是…:

有点晚了,但我只是想分享一下,我创建了一个名为的小型开源客户端库,可用于动态生成不同类型的系统负载,如CPU、内存和磁盘I/O

例如,使用FakeLoad生成30秒60%的CPU负载可以这样做:

// Creation
FakeLoad fakeload = FakeLoads.create()
    .lasting(30, TimeUnit.SECONDS)
    .withCpu(60);

// Execution
FakeLoadExecutor executor = FakeLoadExecutors.newDefaultExecutor(); 
executor.execute(fakeload);

它不能提供完美的精度,但它能够生成非常恒定和精确的负载。它可以在Maven Central上使用,因此可以尝试一下:

使用span 100,然后将测量当前CPU设置为currentTimeMillis或其他。睡眠4000万,然后保持循环60天。@Robert Massaioli更深入地思考这一问题会让人怀疑它是否有效。我认为你是对的。我将更改答案。当您需要恒定的CPU负载时,您的要求是否也适用于多核CPU?要在Java中获得CPU亲和力并不容易,而且或多或少是不可能的。没有单个CPU,特别是我想在Android手机上测试它。