2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> Berikut summary runtime nya untuk ngeprint "felix\n" 1 juta kali:
>
> - puts("felix") (C/C++)  = 0.055 secs
> - printf("felix\n") (C/C++) = 0.220 secs (setelah pake compiler
> optimization -O3, menjadi 0.055 secs)
> - System.out.print (Java) = 4.484 secs
> - System.out.println (Java) = 9.046 secs
> - 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 1.351 
> secs
> - 1 juta kali append di StringBuilder + 1x System.out.println (Java) =
> 0.430 secs
> - PrintWriter (Java) = 0.321 secs
> - BufferedWriter (Java) = 0.263 secs
>
> Jadi tandingannya puts (C/C++) adalah BufferedWriter.

Saya barusan mencoba dengan java.nio dan hasilnya 3.460 kali lebih cepat!
Dengan java.nio, untuk nge print "felix\n" 1 juta kali runtimenya
adalah 0.076 secs (semua di komputer yang sama).

Code nya sebagai berikut:

        FileOutputStream fout = new FileOutputStream("speednio.out");
        FileChannel fc = fout.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(60000);

        byte[] msg = "felix\n".getBytes();
        for (int i=0; i<100; i++){
                buffer.clear();
                for (int j=0; j<10000; j++) buffer.put(msg);
                buffer.flip();
                fc.write(buffer);
        }


Dengan demikian, perbedaan antara puts C/C++ dengan java.nio hampir
tidak significant.
Hanya 0.055 berbanding 0.076.

Bahkan kalau di komputer lain, saya mendapatkan puts vs. java.nio
adalah 0.054 banding 0.044.
Disini java.nio lebih cepat 0.010 seconds!
Jadi keunggulan masing-masing sudah tidak significant lagi!

Hidup Java NIO !

Untuk yang ingin tahu kenapa java.nio bisa secepat itu, bisa liat
tutorial dari IBM:

http://www.cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf

Jawabannya adalah Java NIO memprocess I/O dalam "blocks" instead of "stream".

Ternyata ada titik terang dalam hal I/O di Java :D

Dengan demikian, Logger2 di Java harusnya pakai Java NIO juga.
Setidaknya harus pakai BufferedWriter.
Kalau masih liat Logger2 pakai System.out.println, tertawakan saja :P

Felix Halim

Kirim email ke