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 >