簡體   English   中英

為什么我的Java繪圖代碼占用大量CPU?

[英]Why does my Java drawing code take so much CPU?

我花了3天的時間學習Java,並編寫了代碼以繪制用X繪制的對角線。這占用了我的i5 CPU的28%,我不知道為什么。

public class Main { 
    public static void main(String[] args) { 

        for (int i=0; i<20000; i++) {
            for (int j=0; j<i; j++) {
                System.out.print("  ");
            }
            System.out.println("X");
        }
    }
}

編輯1:順便說一下,在我運行它的前幾分鍾和10分鍾之后,輸出有點不同。 奇怪的。 X之間的距離變長。 10分鍾后截圖

編輯2:我編寫了另一個代碼,只是想知道到達的“進度”,當我達到100、200等時,它將打印出來。 但是代碼無法在Windows上編譯,可以在https://www.compilejava.net上正常編譯。 有什么問題?

public class Main {
  public static void main(String[] args) { 

for (int i=0; i<20000; i++) {
    for (int j=0; j<i; j++)
    {
    System.out.print("  ");
    }
System.out.println("X");
if ((i % 100)==0) {
System.out.println("Your cute code made it to the 100th lapse!");
}
}
}
}

為了演示這里發生的事情,請考慮以下代碼:

public static void main(String[] args) {

    int iTotal = 0;
    int jTotal = 0;
    for (int i = 0; i < 20000; i++) {
        for (int j = 0; j < i; j++) {
            jTotal += 1;
        }
        iTotal += 1;
    }

    System.out.println("Total I: " + iTotal);
    System.out.println("Total J: " + jTotal);
    System.out.println("Total:   " + jTotal + iTotal);
}

在這里,我刪除了打印件,僅使用計數器來幫助您准確了解此處發生的情況

輸出:

Total I: 20,000
Total J: 199,990,000
Total:   19,999,000,020,000

好吧,很明顯這將花費很多! 它將迭代很多次! j的每個值都是20000(1 + 2 + 3 + 4 + ... + 19999 + 20000)的總和。

因此,復雜度高於O(n)

考慮到這一點,您正在執行的打印數量確實很高。 20000倍X和20000空格的總和!

正如注釋中所觀察到的那樣,您的代碼嘗試打印20000個 “ X”字符,但更糟糕的是,它嘗試打印總共約4億個空格字符。 電腦速度很快,但這仍然需要一些努力。

如果正確記住我的高中數學,則您將執行大約2億個打印呼叫。 您正在產生2萬行屏幕輸出。 使用相當大量的CPU並花費一些時間來完成似乎並不奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM