Contoh code C/C++ untuk melakukan puts sebanyak 1 juta kali:

for (int i=0; i<1000000; i++)
    puts("felix");


Contoh code Java untuk melakukan System.out.println sebanyak 1 juta kali:

for (int i=0; i<1000000; i++)
    System.out.printlnfelix");


Ternyata, menggunakan puts hanya membutuhkan waktu 0.055 detik.
Sedangkan menggunakan System.out.println membutuhkan waktu 10 detik.

Ada yang tahu kenapa Java bisa selambat ini?



Cara improve di Java adalah dengan menggunakan StringBuffer sebelum di println:

StringBuffer sb = new StringBuffer();
for (int i=0; i<1000000; i++)
    sb.append("felix\n");
System.out.println(sb.toString());

Ternyata runtimenya turun drastis dari 10 detik menjadi 1.351 detik.
StringBuilder lebih cepat sedikit daripada StringBuffer, sekitar 0.430 detik.
Tetapi tetap saja itu 0.430 itu 10x lebih lambat dari 0.055 detiknya
puts (oleh C/C++).


Dan tentu saja, menggunakan StringBuffer / StringBuilder bukan solusi yang baik,
karena dia menggunakan MEMORY besar sebagai buffer.

Sedangkan puts nya C/C++ tidak perlu menampung nya di buffer
(meski internalnya mungkin ada sedikit buffer, tapi itu insignificant).


Jadi puts nya C++ boleh dikatakan MENANG TELAK daripada solusi Java
dalam bentuk apapun.

Apakah ada cara supaya Java tidak kalah setelak ini?


Felix Halim

Kirim email ke