Skip to content

Instantly share code, notes, and snippets.

@wrpinheiro
Created February 10, 2016 22:49
Show Gist options
  • Save wrpinheiro/6dc60a3cf0e545b32481 to your computer and use it in GitHub Desktop.
Save wrpinheiro/6dc60a3cf0e545b32481 to your computer and use it in GitHub Desktop.
Observando JIT em ação com primitivos
public class TwoLoopsWithObjects {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Integer i = new Integer(0);
Integer max = new Integer(100000);
while (i.intValue() < 100000) {
Integer j = i;
long start = System.nanoTime();
while (j.intValue() < 100000) {
j = new Integer(j.intValue() + 1);
}
long estimated = System.nanoTime() - start;
sb.append("It #" + i + " duration " + (estimated / 1000.0d) + "μ\n");
i = new Integer(i.intValue() + 1);
}
System.out.println(sb);
}
}
# java TwoLoopsWithObjects | head -500
It #0 duration 6600.113μ
It #1 duration 1910.801μ
It #2 duration 2099.174μ
It #3 duration 1913.568μ
It #4 duration 961.353μ
It #5 duration 927.057μ
It #6 duration 848.371μ
It #7 duration 876.483μ
It #8 duration 907.67μ
It #9 duration 868.635μ
It #10 duration 864.433μ
It #11 duration 882.534μ
It #12 duration 868.155μ
It #13 duration 895.743μ
It #14 duration 934.011μ
It #15 duration 1077.41μ
It #16 duration 1043.858μ
It #17 duration 976.768μ
It #18 duration 871.334μ
It #19 duration 862.534μ
It #20 duration 1608.364μ
It #21 duration 450.312μ
It #22 duration 256.206μ
It #23 duration 258.675μ
It #24 duration 257.043μ
It #25 duration 256.346μ
It #26 duration 257.324μ
It #27 duration 258.783μ
It #28 duration 262.372μ
It #29 duration 412.343μ
It #30 duration 283.267μ
It #31 duration 280.472μ
It #32 duration 281.052μ
It #33 duration 281.563μ
It #34 duration 259.117μ
It #35 duration 258.56μ
It #36 duration 261.271μ
It #37 duration 258.312μ
It #38 duration 354.749μ
It #39 duration 264.131μ
It #40 duration 256.185μ
It #41 duration 1207.147μ
It #42 duration 286.986μ
It #43 duration 280.335μ
It #44 duration 281.14μ
It #45 duration 285.192μ
It #46 duration 288.398μ
It #47 duration 290.022μ
It #48 duration 279.94μ
It #49 duration 280.742μ
It #50 duration 282.606μ
It #51 duration 283.331μ
It #52 duration 283.436μ
It #53 duration 283.8μ
It #54 duration 282.8μ
It #55 duration 284.002μ
It #56 duration 284.215μ
It #57 duration 284.156μ
It #58 duration 284.199μ
It #59 duration 295.992μ
It #60 duration 259.512μ
It #61 duration 259.356μ
It #62 duration 933.091μ
It #63 duration 255.86μ
It #64 duration 253.214μ
It #65 duration 273.126μ
It #66 duration 264.65μ
It #67 duration 255.411μ
It #68 duration 258.927μ
It #69 duration 259.733μ
It #70 duration 258.821μ
It #71 duration 260.359μ
It #72 duration 260.847μ
It #73 duration 275.937μ
It #74 duration 268.265μ
It #75 duration 258.343μ
It #76 duration 259.603μ
It #77 duration 259.198μ
It #78 duration 260.492μ
It #79 duration 258.459μ
It #80 duration 300.699μ
It #81 duration 286.721μ
It #82 duration 260.352μ
It #83 duration 1092.782μ
It #84 duration 254.04μ
It #85 duration 254.785μ
It #86 duration 257.792μ
It #87 duration 257.368μ
It #88 duration 257.125μ
It #89 duration 258.75μ
It #90 duration 258.769μ
It #91 duration 258.602μ
It #92 duration 257.511μ
It #93 duration 257.238μ
It #94 duration 257.254μ
It #95 duration 255.967μ
It #96 duration 257.447μ
It #97 duration 257.904μ
It #98 duration 260.906μ
It #99 duration 259.132μ
It #100 duration 269.426μ
It #101 duration 256.012μ
It #102 duration 489.191μ
It #103 duration 293.187μ
It #104 duration 305.228μ
It #105 duration 822.587μ
It #106 duration 963.581μ
It #107 duration 977.939μ
It #108 duration 739.239μ
It #109 duration 936.869μ
It #110 duration 982.655μ
It #111 duration 921.699μ
It #112 duration 925.48μ
It #113 duration 908.607μ
It #114 duration 933.387μ
It #115 duration 1329.776μ
It #116 duration 1275.257μ
It #117 duration 932.658μ
It #118 duration 919.079μ
It #119 duration 935.603μ
It #120 duration 922.868μ
It #121 duration 940.122μ
It #122 duration 907.721μ
It #123 duration 922.605μ
It #124 duration 897.023μ
It #125 duration 941.802μ
It #126 duration 1476.401μ
It #127 duration 324.984μ
It #128 duration 266.003μ
It #129 duration 255.706μ
It #130 duration 255.609μ
It #131 duration 315.531μ
It #132 duration 267.516μ
It #133 duration 269.161μ
It #134 duration 271.482μ
It #135 duration 271.428μ
It #136 duration 279.716μ
It #137 duration 262.608μ
It #138 duration 275.116μ
It #139 duration 255.217μ
It #140 duration 255.352μ
It #141 duration 258.143μ
It #142 duration 255.962μ
It #143 duration 257.052μ
It #144 duration 257.526μ
It #145 duration 257.373μ
It #146 duration 257.18μ
It #147 duration 257.318μ
It #148 duration 257.677μ
It #149 duration 258.384μ
It #150 duration 257.124μ
It #151 duration 258.154μ
It #152 duration 256.538μ
It #153 duration 258.542μ
It #154 duration 258.006μ
It #155 duration 257.397μ
It #156 duration 258.827μ
It #157 duration 256.87μ
It #158 duration 267.515μ
It #159 duration 255.299μ
It #160 duration 255.822μ
It #161 duration 257.047μ
It #162 duration 257.332μ
It #163 duration 258.592μ
It #164 duration 257.731μ
It #165 duration 296.302μ
It #166 duration 259.739μ
It #167 duration 254.052μ
It #168 duration 1132.198μ
It #169 duration 264.22μ
It #170 duration 269.165μ
It #171 duration 272.121μ
It #172 duration 270.482μ
It #173 duration 268.592μ
It #174 duration 272.529μ
It #175 duration 273.174μ
It #176 duration 269.245μ
It #177 duration 271.812μ
It #178 duration 271.545μ
It #179 duration 270.922μ
It #180 duration 270.49μ
It #181 duration 271.998μ
It #182 duration 273.467μ
It #183 duration 270.371μ
It #184 duration 275.021μ
It #185 duration 272.412μ
It #186 duration 270.513μ
It #187 duration 272.272μ
It #188 duration 272.22μ
It #189 duration 300.637μ
It #190 duration 289.001μ
It #191 duration 261.344μ
It #192 duration 255.237μ
It #193 duration 254.885μ
It #194 duration 257.092μ
It #195 duration 255.183μ
It #196 duration 256.257μ
It #197 duration 261.303μ
It #198 duration 254.927μ
It #199 duration 257.731μ
It #200 duration 255.946μ
It #201 duration 258.708μ
It #202 duration 255.885μ
It #203 duration 256.096μ
It #204 duration 485.972μ
It #205 duration 296.24μ
It #206 duration 304.058μ
It #207 duration 289.723μ
It #208 duration 276.933μ
It #209 duration 261.225μ
It #210 duration 263.853μ
It #211 duration 298.62μ
It #212 duration 1120.2μ
It #213 duration 981.758μ
It #214 duration 905.243μ
It #215 duration 847.003μ
It #216 duration 977.103μ
It #217 duration 981.666μ
It #218 duration 956.287μ
It #219 duration 922.624μ
It #220 duration 906.813μ
It #221 duration 973.772μ
It #222 duration 898.754μ
It #223 duration 921.494μ
It #224 duration 904.546μ
It #225 duration 893.529μ
It #226 duration 884.639μ
It #227 duration 879.27μ
It #228 duration 909.706μ
It #229 duration 1008.87μ
It #230 duration 998.431μ
It #231 duration 955.672μ
It #232 duration 880.082μ
It #233 duration 982.826μ
It #234 duration 931.27μ
It #235 duration 862.06μ
It #236 duration 834.456μ
It #237 duration 862.538μ
It #238 duration 835.111μ
It #239 duration 1031.864μ
It #240 duration 1007.196μ
It #241 duration 1058.207μ
It #242 duration 1021.425μ
It #243 duration 1012.442μ
It #244 duration 883.669μ
It #245 duration 910.463μ
It #246 duration 913.489μ
It #247 duration 979.11μ
It #248 duration 937.6μ
It #249 duration 985.484μ
It #250 duration 980.208μ
It #251 duration 1053.218μ
It #252 duration 1029.249μ
It #253 duration 950.428μ
It #254 duration 1450.729μ
It #255 duration 252.596μ
It #256 duration 263.873μ
It #257 duration 260.674μ
It #258 duration 254.461μ
It #259 duration 450.635μ
It #260 duration 278.444μ
It #261 duration 281.714μ
It #262 duration 287.707μ
It #263 duration 267.118μ
It #264 duration 269.686μ
It #265 duration 261.842μ
It #266 duration 255.993μ
It #267 duration 255.832μ
It #268 duration 255.728μ
It #269 duration 256.723μ
It #270 duration 255.631μ
It #271 duration 256.765μ
It #272 duration 255.626μ
It #273 duration 255.95μ
It #274 duration 256.11μ
It #275 duration 256.799μ
It #276 duration 257.054μ
It #277 duration 255.307μ
It #278 duration 257.679μ
It #279 duration 256.849μ
It #280 duration 255.685μ
It #281 duration 258.549μ
It #282 duration 258.051μ
It #283 duration 257.676μ
It #284 duration 254.56μ
It #285 duration 257.19μ
It #286 duration 255.567μ
It #287 duration 262.761μ
It #288 duration 255.947μ
It #289 duration 254.407μ
It #290 duration 254.911μ
It #291 duration 258.035μ
It #292 duration 262.239μ
It #293 duration 257.646μ
It #294 duration 258.299μ
It #295 duration 257.41μ
It #296 duration 257.049μ
It #297 duration 256.186μ
It #298 duration 259.173μ
It #299 duration 256.601μ
It #300 duration 256.765μ
It #301 duration 256.981μ
It #302 duration 261.394μ
It #303 duration 257.282μ
It #304 duration 254.143μ
It #305 duration 257.14μ
It #306 duration 255.404μ
It #307 duration 257.284μ
It #308 duration 254.749μ
It #309 duration 255.244μ
It #310 duration 257.991μ
It #311 duration 256.651μ
It #312 duration 257.297μ
It #313 duration 256.222μ
It #314 duration 256.286μ
It #315 duration 256.556μ
It #316 duration 255.894μ
It #317 duration 256.85μ
It #318 duration 255.917μ
It #319 duration 257.581μ
It #320 duration 256.567μ
It #321 duration 255.83μ
It #322 duration 258.581μ
It #323 duration 256.448μ
It #324 duration 259.074μ
It #325 duration 256.007μ
It #326 duration 254.436μ
It #327 duration 256.702μ
It #328 duration 254.472μ
It #329 duration 255.961μ
It #330 duration 255.592μ
It #331 duration 255.232μ
It #332 duration 256.635μ
It #333 duration 254.998μ
It #334 duration 258.048μ
It #335 duration 272.316μ
It #336 duration 267.751μ
It #337 duration 303.473μ
It #338 duration 258.604μ
It #339 duration 699.046μ
It #340 duration 252.488μ
It #341 duration 252.804μ
It #342 duration 254.827μ
It #343 duration 268.41μ
It #344 duration 395.14μ
It #345 duration 281.089μ
It #346 duration 282.227μ
It #347 duration 278.919μ
It #348 duration 281.741μ
It #349 duration 255.408μ
It #350 duration 255.685μ
It #351 duration 255.379μ
It #352 duration 254.828μ
It #353 duration 257.842μ
It #354 duration 259.16μ
It #355 duration 255.505μ
It #356 duration 257.839μ
It #357 duration 255.601μ
It #358 duration 255.969μ
It #359 duration 255.964μ
It #360 duration 257.904μ
It #361 duration 255.084μ
It #362 duration 256.536μ
It #363 duration 258.722μ
It #364 duration 280.087μ
It #365 duration 262.296μ
It #366 duration 263.324μ
It #367 duration 259.619μ
It #368 duration 255.999μ
It #369 duration 255.933μ
It #370 duration 258.099μ
It #371 duration 255.978μ
It #372 duration 256.452μ
It #373 duration 257.272μ
It #374 duration 257.707μ
It #375 duration 271.615μ
It #376 duration 261.107μ
It #377 duration 255.389μ
It #378 duration 254.654μ
It #379 duration 255.191μ
It #380 duration 258.136μ
It #381 duration 256.335μ
It #382 duration 256.188μ
It #383 duration 256.018μ
It #384 duration 277.706μ
It #385 duration 260.5μ
It #386 duration 258.608μ
It #387 duration 261.509μ
It #388 duration 255.738μ
It #389 duration 256.377μ
It #390 duration 255.088μ
It #391 duration 253.112μ
It #392 duration 252.055μ
It #393 duration 253.154μ
It #394 duration 259.764μ
It #395 duration 255.724μ
It #396 duration 256.592μ
It #397 duration 257.927μ
It #398 duration 255.09μ
It #399 duration 255.686μ
It #400 duration 254.324μ
It #401 duration 258.839μ
It #402 duration 255.323μ
It #403 duration 256.788μ
It #404 duration 259.071μ
It #405 duration 257.839μ
It #406 duration 255.114μ
It #407 duration 255.264μ
It #408 duration 257.343μ
It #409 duration 255.192μ
It #410 duration 256.25μ
It #411 duration 299.409μ
It #412 duration 301.382μ
It #413 duration 282.827μ
It #414 duration 260.114μ
It #415 duration 254.239μ
It #416 duration 271.547μ
It #417 duration 253.749μ
It #418 duration 255.616μ
It #419 duration 255.014μ
It #420 duration 255.665μ
It #421 duration 259.557μ
It #422 duration 256.851μ
It #423 duration 255.681μ
It #424 duration 256.365μ
It #425 duration 794.709μ
It #426 duration 937.842μ
It #427 duration 984.247μ
It #428 duration 974.899μ
It #429 duration 976.395μ
It #430 duration 1006.967μ
It #431 duration 938.33μ
It #432 duration 922.388μ
It #433 duration 989.22μ
It #434 duration 857.049μ
It #435 duration 857.374μ
It #436 duration 848.155μ
It #437 duration 903.158μ
It #438 duration 904.724μ
It #439 duration 898.875μ
It #440 duration 896.945μ
It #441 duration 875.618μ
It #442 duration 900.695μ
It #443 duration 868.164μ
It #444 duration 881.796μ
It #445 duration 896.429μ
It #446 duration 861.391μ
It #447 duration 907.722μ
It #448 duration 859.391μ
It #449 duration 916.917μ
It #450 duration 911.078μ
It #451 duration 872.428μ
It #452 duration 1106.463μ
It #453 duration 927.167μ
It #454 duration 864.522μ
It #455 duration 874.534μ
It #456 duration 896.836μ
It #457 duration 900.662μ
It #458 duration 874.593μ
It #459 duration 871.206μ
It #460 duration 896.919μ
It #461 duration 890.199μ
It #462 duration 859.063μ
It #463 duration 1470.027μ
It #464 duration 1105.617μ
It #465 duration 971.37μ
It #466 duration 1293.719μ
It #467 duration 1039.979μ
It #468 duration 1025.766μ
It #469 duration 1037.968μ
It #470 duration 1005.865μ
It #471 duration 1024.653μ
It #472 duration 1002.394μ
It #473 duration 1015.673μ
It #474 duration 949.008μ
It #475 duration 1066.252μ
It #476 duration 909.042μ
It #477 duration 877.873μ
It #478 duration 837.326μ
It #479 duration 849.412μ
It #480 duration 843.558μ
It #481 duration 851.171μ
It #482 duration 835.963μ
It #483 duration 902.92μ
It #484 duration 923.248μ
It #485 duration 880.584μ
It #486 duration 912.291μ
It #487 duration 874.134μ
It #488 duration 903.535μ
It #489 duration 889.746μ
It #490 duration 909.713μ
It #491 duration 867.522μ
It #492 duration 919.934μ
It #493 duration 887.82μ
It #494 duration 903.514μ
It #495 duration 870.654μ
It #496 duration 869.544μ
It #497 duration 894.303μ
It #498 duration 878.11μ
It #499 duration 898.069μ
public class TwoLoopsWithPrimitives {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
int i = 0, j;
long start, estimated;
while (i < 100000) {
j = i;
start = System.nanoTime();
while (j < 100000) {
j++;
}
estimated = System.nanoTime() - start;
sb.append("It #" + i + " duration " + (estimated / 1000.0d) + "μ\n");
i++;
}
System.out.println(sb);
}
}
# java TwoLoopsWithPrimitives | head -50
It #0 duration 1147.059μ
It #1 duration 256.438μ
It #2 duration 228.121μ
It #3 duration 242.152μ
It #4 duration 278.272μ
It #5 duration 213.799μ
It #6 duration 213.827μ
It #7 duration 213.472μ
It #8 duration 231.829μ
It #9 duration 270.146μ
It #10 duration 231.122μ
It #11 duration 213.666μ
It #12 duration 213.735μ
It #13 duration 213.731μ
It #14 duration 213.933μ
It #15 duration 213.911μ
It #16 duration 213.558μ
It #17 duration 214.07μ
It #18 duration 213.776μ
It #19 duration 299.457μ
It #20 duration 266.236μ
It #21 duration 56.386μ
It #22 duration 0.046μ
It #23 duration 0.038μ
It #24 duration 0.046μ
It #25 duration 0.04μ
It #26 duration 0.04μ
It #27 duration 0.04μ
It #28 duration 0.039μ
It #29 duration 0.039μ
It #30 duration 0.039μ
It #31 duration 0.039μ
It #32 duration 0.039μ
It #33 duration 0.039μ
It #34 duration 0.039μ
It #35 duration 0.04μ
It #36 duration 0.041μ
It #37 duration 0.04μ
It #38 duration 0.04μ
It #39 duration 0.039μ
It #40 duration 0.039μ
It #41 duration 0.039μ
It #42 duration 0.04μ
It #43 duration 0.04μ
It #44 duration 0.04μ
It #45 duration 0.04μ
It #46 duration 0.039μ
It #47 duration 0.039μ
It #48 duration 0.04μ
It #49 duration 0.039μ
@wrpinheiro
Copy link
Author

Na classe TwoLoopsWithPrimitives as iterações são feitas usando primitivos e na TwoLoopsWithObjects são feitas as iterações com conversões para objetos conforme o exemplo do @akitaonrails . Incluí uma medição do tempo de execução do laço mais interno nas duas versões. Vejam os arquivos com os resultado.

Notem a redução de tempo na execução do TwoLoopsWithPrimitives a partir da 20a. iteração, momento que deve ocorrer uma otimização. No caso do TwoLoopsWithObjects essa otimização já não é possível e o tempo segue o padrão esperado pelo menos até a iteração 500.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment