RALAT!

Java NIO tidak secepat ini.
Saya lupa panggil close() :P

Ternyata setelah dipanggil close, menjadi 0.784 detik !!

Solusi Terbaik masih BufferedWriter !!!

Sorry False Alarm!

Felix Halim

2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> 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