【问题标题】:Artificial generation of cpu load in Java在 Java 中人工生成 cpu 负载
【发布时间】:2011-09-06 18:49:50
【问题描述】:

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

【问题讨论】:

  • 当您想要恒定的 CPU 负载时​​,您的要求是否也适用于多核 CPU?在 Java 中获得 CPU 亲和性并不容易(而且或多或少不可能)。
  • 没有单CPU,特别想在安卓手机上测试一下。

标签: java android cpu-usage


【解决方案1】:

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

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

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

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

它不能提供完美的精度,但它能够产生相当恒定和准确的载荷。它在 Maven Central 上可用,所以请随意尝试一下 :)

【讨论】:

    【解决方案2】:

    尚未对此进行测试,但它可能大致可以使您的应用程序以正确的比例工作和休眠。类似(伪代码):

    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 
    

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

    【讨论】:

    • 使跨度为 100,然后使测量当前 CPU 为 currentTimeMillis 之类的。睡眠 40 毫秒,然后循环播放 60 毫秒。
    • @Robert Massaioli 更深入地思考它会让人怀疑它是否会起作用。我想你是对的。我会改变答案。
    【解决方案3】:

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

    1. JVM 解释代码的方式(假设它完全解释代码)取决于实现
    2. 编译器和 JVM 可能会优化代码(当然是以与实现相关的方式),以便您可以运行与给定 .class 文件中的字节码不同的字节码。

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多