Агульны час, затрачаны на цыкл для завяршэння заўсёды розна для кожнага выканання

У мяне ёсць простая ніжэй праграма, якая перабірае праз масіў

Integer [] intArray = new Integer[20000];
    int index=0;
    for(int i=10000; i>=0; i--){
        intArray[index]=i;
        index++;
    }

    long startTime = System.currentTimeMillis();
    for(Integer t : intArray){

        System.out.println(t);
    }
    long endTime = System.currentTimeMillis();
    long consumedTime = endTime-startTime;
    System.out.println("Consumed time "+ consumedTime);

Я заўсёды атрымліваю розныя значэнні спажытага часу, як 743, 790, 738, 825, 678.

Чаму час, затрачаны на цыкл заўсёды розны для кожнага выканання.

Звярніце ўвагу, я бягу гэты код у якасці асноўнага метаду. Мая АС Ubuntu і працэсар 32 біт.

5
Прыклад таго, што можа пайсці не так, калі вымярэння часу з дапамогай кавалачка Java-код: stackoverflow.com/questions/504103/…
дададзена аўтар assylias, крыніца
Прыклад таго, што можа пайсці не так, калі вымярэння часу з дапамогай кавалачка Java-код: stackoverflow.com/questions/504103/…
дададзена аўтар assylias, крыніца

10 адказы

Паколькі ваша праграма не адзіная рэч, працуе на кампутары. Сама АС, усе іншыя прыкладання, і г.д. ... яны займаюць працэсарны час таксама - і не заўсёды дакладна такая ж суму.

4
дададзена

Паколькі ваша праграма не адзіная рэч, працуе на кампутары. Сама АС, усе іншыя прыкладання, і г.д. ... яны займаюць працэсарны час таксама - і не заўсёды дакладна такая ж суму.

4
дададзена

Там няма ніякага пэўнага часу Java праграмы будуць прымаць. Гэта залежыць ад таго, што ўсё працуе на машыне. Акрамя таго, паколькі вы карыстаецеся Integer гэта займае больш часу. Калі вы толькі натыўнымі адрозненні, верагодна, будзе менш.

2
дададзена

Там няма ніякага пэўнага часу Java праграмы будуць прымаць. Гэта залежыць ад таго, што ўсё працуе на машыне. Акрамя таго, паколькі вы карыстаецеся Integer гэта займае больш часу. Калі вы толькі натыўнымі адрозненні, верагодна, будзе менш.

2
дададзена

Гэта адбываецца таму, што ваша аперацыйная сістэма перамыкае задачы і выконвае gazillions адначасовых аперацый, як вы выкарыстоўваеце свой Java праграму. Ваш кліент можа быць хуткай, калі аперацыйная сістэма не апрацоўвае шмат да таго часу вы запускалі яго, і ён таксама можа быць павольным, калі аперацыйная сістэма занятая.

Іншымі словамі, аперацыйная сістэма выконвае іншы набор паралельных задач кожны раз, калі ваша праграма працуе такім чынам, розны час выканання.

1
дададзена

Гэта адбываецца таму, што ваша аперацыйная сістэма перамыкае задачы і выконвае gazillions адначасовых аперацый, як вы выкарыстоўваеце свой Java праграму. Ваш кліент можа быць хуткай, калі аперацыйная сістэма не апрацоўвае шмат да таго часу вы запускалі яго, і ён таксама можа быць павольным, калі аперацыйная сістэма занятая.

Іншымі словамі, аперацыйная сістэма выконвае іншы набор паралельных задач кожны раз, калі ваша праграма працуе такім чынам, розны час выканання.

1
дададзена

Прафіляванне праграмы Java надзейна далёка не трывіяльная. Акрамя змяненняў, выкліканых іншымі працэсамі на вашай машыне робяць сваю справу, ужо паказвалася ў іншых адказаў, вы таксама атрымліваеце недетерминизм з-за зборкі смецця і цікавых эфектаў вашай віртуальнай машыны, калі яна мае Just-In-Time кампілятар.

У вашым прыкладзе, збор смецця не з'яўляецца праблемай, але JIT кампіляцыя цалкам можа выклікаць першыя некалькі ітэрацый цыкла, значна больш павольна, чым у бліжэйшыя пару тысяч. Таму няправільна падзяліць агульны час на колькасць ітэрацый, каб атрымаць добрую набліжэнне сярэдняга часу на адну ітэрацыю.

Для таго, каб пазбегнуць гэтага эфекту, вы павінны «праяўляць» цела цыклу некалькі разоў, перш чым пачаць вымярэнне.

0
дададзена

Прафіляванне праграмы Java надзейна далёка не трывіяльная. Акрамя змяненняў, выкліканых іншымі працэсамі на вашай машыне робяць сваю справу, ужо паказвалася ў іншых адказаў, вы таксама атрымліваеце недетерминизм з-за зборкі смецця і цікавых эфектаў вашай віртуальнай машыны, калі яна мае Just-In-Time кампілятар.

У вашым прыкладзе, збор смецця не з'яўляецца праблемай, але JIT кампіляцыя цалкам можа выклікаць першыя некалькі ітэрацый цыкла, значна больш павольна, чым у бліжэйшыя пару тысяч. Таму няправільна падзяліць агульны час на колькасць ітэрацый, каб атрымаць добрую набліжэнне сярэдняга часу на адну ітэрацыю.

Для таго, каб пазбегнуць гэтага эфекту, вы павінны «праяўляць» цела цыклу некалькі разоў, перш чым пачаць вымярэнне.

0
дададзена

Паколькі Java не дае ніякіх абяцанняў аб час выканання. У сучасных АС ёсць шмат рэчаў адбываецца адначасова.

Нягледзячы на ​​тое, што часы не тое ж самае, я не бачу шмат варыяцый.

0
дададзена

Паколькі Java не дае ніякіх абяцанняў аб час выканання. У сучасных АС ёсць шмат рэчаў адбываецца адначасова.

Нягледзячы на ​​тое, што часы не тое ж самае, я не бачу шмат варыяцый.

0
дададзена