2011-06-02 27 views
2

是否有一種簡單的方法可以在Java中生成恆定的CPU負載?像生成60%的CPU負載一樣。Java中的cpu負載的人工生成

+1

當你想要一個恆定的CPU負載時,你的需求是否也適用於多核CPU?在Java中獲得CPU關聯並不容易(並且或多或少是不可能的)。 – 2011-06-02 03:29:07

+0

沒有單獨的CPU,特別是我想在Android手機中測試它。 – Gheghen 2011-06-02 03:49:13

回答

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 

好吧,你問一個簡單的方法,但... :)

+0

使量程100,然後使當前的CPU爲currentTimeMillis或其他東西。睡40millis,然後保持循環60 – 2011-06-02 03:10:04

+0

@羅伯特馬薩里考慮它更深深地提出懷疑它會工作。我想你是對的。我會改變答案。 – user492238 2011-06-02 03:17:16

1

我認爲這甚至是不可能的,因爲:

  1. JVM解釋代碼的方式(只要它解釋代碼的話)是實現相關
  2. 的編譯器和JVM,可以優化代碼(當然,與實現相關),以便可以運行不同於給定.class文件中字節碼的字節碼。
0

的遲到了樣,只是想和大家分享,我創建了一個小型開放客戶端庫名爲FakeLoad,可用於生成不同類型的系統負載,如CPU,內存和磁盤I/O。

例如,產生的60%用於FakeLoad 30秒的CPU負載可以做這樣的:

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

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

它不提供完美的精確度,但它能夠產生相當恆定的,準確的負載。它可以在Maven Central上使用,所以請隨時試試:)