Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/4 Samuel Franklyn [EMAIL PROTECTED]: Masukan gua sama dengan masukan Frans. Tapi mungkin akan gua perjelas sedikit. Micro benchmark itu tidak berguna. Benchmark yang kompleks macam TPC-C saja cuma sedikit berguna. Kenapa tidak berguna? Kan bisa dijadikan panduan dalam coding? Kalau tahu System.out.println lambatnya bisa sampai 10x lipat daripada BufferedWriter dalam hal menulis ke STDOUT tentu akan berguna donk? Lalu benchmark macam apa yang berguna? Benchmark aplikasi anda sendiri. Kalau hari ini aplikasi anda kecepatannya 1 lalu anda bisa optimasi sehingga kecepatannya 2 nah itu sudah cukup hebat. Aplikasi dunia nyata itu kompleks dan susah sekali di optimasi. Effort berbulan-bulan kadang cuma menaikkan performance 10-20%. Benchmark project sendiri sudah merupakan keharusan kalau ingin mengoptimize project sendiri. Tapi cara meng-optimisasinya adalah dengan mengetahui banyak micro-benchmark yang dilakukan orang2. Lalu dicobakan ke project sendiri, lalu benchmark project sendiri dengan yang sebelumnya. Apakah ada cara lain selain melihat micro-benchmark yang lebih effektif? Saya tetap berpendapat micro-benchmark sangat penting, meskipun hasilnya tidak terlihat langsung di project besar. Felix Halim
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Felix Halim wrote: 2008/6/4 Samuel Franklyn [EMAIL PROTECTED]: Masukan gua sama dengan masukan Frans. Tapi mungkin akan gua perjelas sedikit. Micro benchmark itu tidak berguna. Benchmark yang kompleks macam TPC-C saja cuma sedikit berguna. Kenapa tidak berguna? Kan bisa dijadikan panduan dalam coding? Kalau tahu System.out.println lambatnya bisa sampai 10x lipat daripada BufferedWriter dalam hal menulis ke STDOUT tentu akan berguna donk? Nah itu dia. Tiap aplikasi kan beda. Bisa saja aplikasinya nggak berurusan dengan I/O sama sekali. Satu micro benchmark itu kan cuma mengukur satu aspek yang amat sangat kecil dan itu belum tentu berguna untuk aplikasi kita sendiri. Lalu benchmark macam apa yang berguna? Benchmark aplikasi anda sendiri. Kalau hari ini aplikasi anda kecepatannya 1 lalu anda bisa optimasi sehingga kecepatannya 2 nah itu sudah cukup hebat. Aplikasi dunia nyata itu kompleks dan susah sekali di optimasi. Effort berbulan-bulan kadang cuma menaikkan performance 10-20%. Benchmark project sendiri sudah merupakan keharusan kalau ingin mengoptimize project sendiri. Tapi cara meng-optimisasinya adalah dengan mengetahui banyak micro-benchmark yang dilakukan orang2. Lalu dicobakan ke project sendiri, lalu benchmark project sendiri dengan yang sebelumnya. Apakah ada cara lain selain melihat micro-benchmark yang lebih effektif? Saya tetap berpendapat micro-benchmark sangat penting, meskipun hasilnya tidak terlihat langsung di project besar. Saya tidak setuju. Dari pada belajar banyak sekali micro benchmark orang lain lebih bermanfaat kita memanfaatkan profiler untuk melihat bottleneck dari aplikasi. Lalu bottleneck tersebut diusahakan untuk di distribusi loadnya atau paling tidak di percepat. Kalau sudah tahu bottleneck nya maka menciptakan beberapa micro benchmark sendiri memang bermanfaat. Ini saya rasa lebih bermanfaat dari pada tahu banyak micro benchmark. Micro benchmark bikinan sendiri yang spesifik aplikasi sendiri lebih bermanfaat dari pada banyak micro benchmark orang lain yang nggak relevan. Tapi ini juga masih optimasi level 1. Optimasi level 2 adalah perubahan arsitektur, user interface dan cara pemakaian aplikasi sehingga user merasakan aplikasi cepat. Performance aplikasi sebagian adalah masalah teknis tapi sebagian lagi adalah masalah persepsi user pada saat memakai aplikasi. Dan ini sudah isu psikologis. He he he. Sebagai contoh progress bar itu sebenarnya memperlambat aplikasi. Tapi aplikasi yang nggak ada progress bar itu sering disebut lebih lambat oleh user dibandingkan dengan aplikasi yang ada progress barnya. Yah user kan bukan developer yang terbiasa berpatokan pada millisecond. :-)
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/4 Felix Halim [EMAIL PROTECTED]: 2008/6/4 Samuel Franklyn [EMAIL PROTECTED]: Masukan gua sama dengan masukan Frans. Tapi mungkin akan gua perjelas sedikit. Micro benchmark itu tidak berguna. Benchmark yang kompleks macam TPC-C saja cuma sedikit berguna. Kenapa tidak berguna? Kan bisa dijadikan panduan dalam coding? Kalau tahu System.out.println lambatnya bisa sampai 10x lipat daripada BufferedWriter dalam hal menulis ke STDOUT tentu akan berguna donk? Ya mungkin saja micro-benchmark ada gunanya. Tapi harus diperhatikan, *biasanya* kode yang sudah dioptimasi akan less-readable daripada kode yang normal. Ini merupakan maintenance-cost, lebih sulit membacanya, dan mengubahnya. Pertanyaannya sekarang, apakah cost yang harus dibayar gara2 optimasi tersebut cukup sepadan dengan benefitnya ?? Jangan-jangan System.out.println yang itu ternyata cuma menyita 1% dari total waktu eksekusi. Kalau pendekatan yang biasa saya lakukan, saya akan cari bottleneck yang paling besar. Misalnya, berdasarkan profiling, ketahuan bahwa untuk merender satu page, proporsinya sebagai berikut: 5% framework overhead 40% business logic 40% akses database 5% logging 10% page rendering Maka target pertama saya adalah kode akses database dan business logic. Bila saya bisa mengoptimasi setengahnya saja dari kedua hal tersebut, aplikasi saya akan 40% lebih cepat. Hampir 2x lebih cepat. Bila saya optimasi System.out.println yang ada di logging, walaupun berhasil meningkatkan kinerjanya 1000 kali lipat, aplikasi tidak akan menjadi 40% lebih cepat. Intinya, choose your battle carefully -- Endy Muhardin http://endy.artivisi.com Y! : endymuhardin -- life learn contribute --
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Hi Bung Endy, +1 very wise chosen words ! 2008/6/4 Endy Muhardin [EMAIL PROTECTED]: Bila saya optimasi System.out.println yang ada di logging, walaupun berhasil meningkatkan kinerjanya 1000 kali lipat, aplikasi tidak akan menjadi 40% lebih cepat. Intinya, choose your battle carefully -- Endy Muhardin http://endy.artivisi.com Y! : endymuhardin -- life learn contribute -- . -- Thanks Best Regards, Feris PT. Putera Handal Indotama A Business Intelligence Company Jl. K.H. Moh Mansyur No. 11 B 8 - 12 Jakarta - Indonesia Phone : +6221-30119353 Fax : +6221-5513483 Mobile : +628176-474-525 http://business-intelligence.phi-integration.com http://blog.komputasiawan.com
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan C/C++ sudah tidak berbeda! C/C++ puts : 2.518726 secs (system time) Java BufferedWriter : 2.473039172 secs (system time) Code untuk benchmarknya saya attach. Silahkan dicoba sendiri. Conclusionnya: Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print dalam jumlah banyak. Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter. Kecepatannya menyaingi puts nya C/C++ kok. Thread ini sudah boleh ditutup :D Thanks buat semua yang udah kasih masukkan. Felix Halim 2008/6/2 Felix Halim [EMAIL PROTECTED]: Berikut adalah updated summary dari runtime untuk 1 juta kali print felix\n. Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama. - C/C++ fputs(felix) = 0.055 secs - C/C++ fprintf(felix\n) = 0.055 secs (gak beda pake -O3) - Java System.out.print(felix\n) = 5.227 secs - Java System.out.println(felix) = 9.774 secs - Java 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 0.273 secs - Java 1 juta kali append di StringBuilder + 1x System.out.println (Java) = 0.220 secs - Java PrintWriter = 0.218 secs - Java BufferedWriter = 0.186 secs - Java NIO = 0.857 secs Java NIO dalam hal ini malah lebih lambat. Mungkin saya masih blum bisa memakai Java NIO dengan benar... Berikut code Java NIO nya (sama sih sama sebelumnya). Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1. FileOutputStream fout = new FileOutputStream(speednio.out); FileChannel fc = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; j++) buffer.put(msg); buffer.flip(); fc.write(buffer); } fout.close(); Solusi terbaik masih BufferedWriter :D Yang roughly 3-4 kali lebih lambat dari puts. Felix Halim test.cpp Description: Binary data test.java Description: Binary data
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Felix Halim wrote: Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan C/C++ sudah tidak berbeda! C/C++ puts : 2.518726 secs (system time) Java BufferedWriter : 2.473039172 secs (system time) Code untuk benchmarknya saya attach. Silahkan dicoba sendiri. Conclusionnya: Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print dalam jumlah banyak. Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter. Kecepatannya menyaingi puts nya C/C++ kok. Thread ini sudah boleh ditutup :D Thanks buat semua yang udah kasih masukkan. Kenapa bisa begini? Karena dengan iterasi 10 juta kali maka 2 overhead utama performance Java menjadi tidak berarti. Apa 2 overhead utama performance Java? 1. Waktu start-up. Java waktu start-up pertamanya lama. Dan ini masih terus diusahakan untuk di optimasi oleh engineer Sun. 2. Java menggunakan JIT (Just In Time) Compiler (HotSpot). HotSpot ini butuh waktu tertentu untuk melakukan optimasi code Java yang dijalankan. Salah satu optimasi HotSpot adalah konversi dari byte code menjadi native code. Kalau mau dua overhead utama ini tidak ada maka kita harus menggunakan compiler Java yang melakukan optimisasi di depan dan mengkonversi byte code jadi native code di depan. Compiler Java yang bisa melakukan hal ini adalah GCJ dan Jet Excelsior.
RE: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Kalo dibilang 2 overhead utama java itu membuat lambat... Berarti sebenernya waktu process nya sendiri lebih cepet dong dari C?? Ada yang mau di Tanya ke oom sam nih... Optimasi code di java itu all at once di depan... ato dia akan optimize a few blocks of codes in front? -Original Message- From: jug-indonesia@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Samuel Franklyn Sent: Thursday, June 05, 2008 10:04 AM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!) Felix Halim wrote: Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan C/C++ sudah tidak berbeda! C/C++ puts : 2.518726 secs (system time) Java BufferedWriter : 2.473039172 secs (system time) Code untuk benchmarknya saya attach. Silahkan dicoba sendiri. Conclusionnya: Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print dalam jumlah banyak. Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter. Kecepatannya menyaingi puts nya C/C++ kok. Thread ini sudah boleh ditutup :D Thanks buat semua yang udah kasih masukkan. Kenapa bisa begini? Karena dengan iterasi 10 juta kali maka 2 overhead utama performance Java menjadi tidak berarti. Apa 2 overhead utama performance Java? 1. Waktu start-up. Java waktu start-up pertamanya lama. Dan ini masih terus diusahakan untuk di optimasi oleh engineer Sun. 2. Java menggunakan JIT (Just In Time) Compiler (HotSpot). HotSpot ini butuh waktu tertentu untuk melakukan optimasi code Java yang dijalankan. Salah satu optimasi HotSpot adalah konversi dari byte code menjadi native code. Kalau mau dua overhead utama ini tidak ada maka kita harus menggunakan compiler Java yang melakukan optimisasi di depan dan mengkonversi byte code jadi native code di depan. Compiler Java yang bisa melakukan hal ini adalah GCJ dan Jet Excelsior. Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL PROTECTED] Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id Yahoo! Groups Links
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Adelwin Handoyo wrote: Kalo dibilang 2 overhead utama java itu membuat lambat... Berarti sebenernya waktu process nya sendiri lebih cepet dong dari C?? Kalau sudah teroptimasi maka Java bisa lebih cepat dari C. Tapi ini bisa lho bukan pasti. Karena proses optimasi dari HotSpot itu sangat kompleks. Ada yang mau di Tanya ke oom sam nih... Optimasi code di java itu all at once di depan... ato dia akan optimize a few blocks of codes in front? Bukan begitu. Tapi lewat cara profiling dan konversi ke native code. Jadi HotSpot compiler Java dari Sun itu dalamnya ada profiler. Pada saat aplikasi dijalankan maka HotSpot akan analisa bagian mana yang lambat dan menentukan apakah bagian yang lambat tersebut bisa di optimasi dengan konversi ke native code. Kalau HotSpot berpendapat bahwa bagian tersebut bisa makin cepat dengan konversi ke native code maka HotSpot akan melakukan konversi ke native code yang teroptimisasi. Konversi ke native code yang teroptimisasi ini mirip kompilasi dari C compiler pakai flag optimisasi. Trik-trik optimisasi native code dari HotSpot tidak kalah dengan trik-trik optimasasi dari C compiler. Tapi HotSpot butuh waktu untuk melakukan profiling dan kompilasi jauh lebih lama dari C compiler. C compiler kan tidak melakukan profiling dan cuma melakukan optimisasi native code. -Original Message- From: jug-indonesia@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Samuel Franklyn Sent: Thursday, June 05, 2008 10:04 AM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!) Felix Halim wrote: Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan C/C++ sudah tidak berbeda! C/C++ puts : 2.518726 secs (system time) Java BufferedWriter : 2.473039172 secs (system time) Code untuk benchmarknya saya attach. Silahkan dicoba sendiri. Conclusionnya: Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print dalam jumlah banyak. Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter. Kecepatannya menyaingi puts nya C/C++ kok. Thread ini sudah boleh ditutup :D Thanks buat semua yang udah kasih masukkan. Kenapa bisa begini? Karena dengan iterasi 10 juta kali maka 2 overhead utama performance Java menjadi tidak berarti. Apa 2 overhead utama performance Java? 1. Waktu start-up. Java waktu start-up pertamanya lama. Dan ini masih terus diusahakan untuk di optimasi oleh engineer Sun. 2. Java menggunakan JIT (Just In Time) Compiler (HotSpot). HotSpot ini butuh waktu tertentu untuk melakukan optimasi code Java yang dijalankan. Salah satu optimasi HotSpot adalah konversi dari byte code menjadi native code. Kalau mau dua overhead utama ini tidak ada maka kita harus menggunakan compiler Java yang melakukan optimisasi di depan dan mengkonversi byte code jadi native code di depan. Compiler Java yang bisa melakukan hal ini adalah GCJ dan Jet Excelsior.
RE: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Jadi lets say ada big chunk of codes yah... Lalu profiler nya akan evaluate itu chunk ato akan coba run once? Mungkin evaluate yah... Kalo run once kan malah justru lebih lambat lagi... Lalu dia evaluate nya berdasarkan apa? Pola2 code nya kah? Atau apa nih? Oh iyah.. just to get it straight... hehehehe .java khan source tuh... .class itu code nya khan? Lalu yang di sebut native code itu beda lagi khan yah? -Original Message- From: jug-indonesia@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Samuel Franklyn Sent: Thursday, June 05, 2008 10:46 AM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!) Adelwin Handoyo wrote: Kalo dibilang 2 overhead utama java itu membuat lambat... Berarti sebenernya waktu process nya sendiri lebih cepet dong dari C?? Kalau sudah teroptimasi maka Java bisa lebih cepat dari C. Tapi ini bisa lho bukan pasti. Karena proses optimasi dari HotSpot itu sangat kompleks. Ada yang mau di Tanya ke oom sam nih... Optimasi code di java itu all at once di depan... ato dia akan optimize a few blocks of codes in front? Bukan begitu. Tapi lewat cara profiling dan konversi ke native code. Jadi HotSpot compiler Java dari Sun itu dalamnya ada profiler. Pada saat aplikasi dijalankan maka HotSpot akan analisa bagian mana yang lambat dan menentukan apakah bagian yang lambat tersebut bisa di optimasi dengan konversi ke native code. Kalau HotSpot berpendapat bahwa bagian tersebut bisa makin cepat dengan konversi ke native code maka HotSpot akan melakukan konversi ke native code yang teroptimisasi. Konversi ke native code yang teroptimisasi ini mirip kompilasi dari C compiler pakai flag optimisasi. Trik-trik optimisasi native code dari HotSpot tidak kalah dengan trik-trik optimasasi dari C compiler. Tapi HotSpot butuh waktu untuk melakukan profiling dan kompilasi jauh lebih lama dari C compiler. C compiler kan tidak melakukan profiling dan cuma melakukan optimisasi native code. -Original Message- From: jug-indonesia@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Samuel Franklyn Sent: Thursday, June 05, 2008 10:04 AM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!) Felix Halim wrote: Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan C/C++ sudah tidak berbeda! C/C++ puts : 2.518726 secs (system time) Java BufferedWriter : 2.473039172 secs (system time) Code untuk benchmarknya saya attach. Silahkan dicoba sendiri. Conclusionnya: Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print dalam jumlah banyak. Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter. Kecepatannya menyaingi puts nya C/C++ kok. Thread ini sudah boleh ditutup :D Thanks buat semua yang udah kasih masukkan. Kenapa bisa begini? Karena dengan iterasi 10 juta kali maka 2 overhead utama performance Java menjadi tidak berarti. Apa 2 overhead utama performance Java? 1. Waktu start-up. Java waktu start-up pertamanya lama. Dan ini masih terus diusahakan untuk di optimasi oleh engineer Sun. 2. Java menggunakan JIT (Just In Time) Compiler (HotSpot). HotSpot ini butuh waktu tertentu untuk melakukan optimasi code Java yang dijalankan. Salah satu optimasi HotSpot adalah konversi dari byte code menjadi native code. Kalau mau dua overhead utama ini tidak ada maka kita harus menggunakan compiler Java yang melakukan optimisasi di depan dan mengkonversi byte code jadi native code di depan. Compiler Java yang bisa melakukan hal ini adalah GCJ dan Jet Excelsior. Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL PROTECTED] Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id Yahoo! Groups Links
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Adelwin Handoyo wrote: Jadi lets say ada big chunk of codes yah... Lalu profiler nya akan evaluate itu chunk ato akan coba run once? Mungkin evaluate yah... Kalo run once kan malah justru lebih lambat lagi... Kalau ada bagian code yang nggak pernah dijalankan maka itu nggak bakal dioptimisasi oleh HotSpot. Malah bukan sekedar dijalankan sekali. Kalau bagian code tersebut cuma dijalankan sekali maka nggak bakal jadi bottleneck dan nggak bakal dioptimisasi oleh HotSpot. Lalu dia evaluate nya berdasarkan apa? Pola2 code nya kah? Atau apa nih? Ini susah dijelaskan dengan singkat. Seperti saya bilang pengambilan keputusan optimize atau nggak dari HotSpot itu kompleks. Sama kompleksnya dengan cara optimisasi native code dari C compiler. Ini ilmu yang nggak bisa dipelajari sambil lalu atau dijelaskan dengan singkat. Sekedar info. Software yang kompleksitasnya mendekati Operating System adalah Compiler. Oh iyah.. just to get it straight... hehehehe .java khan source tuh... .class itu code nya khan? Lalu yang di sebut native code itu beda lagi khan yah? Native code di Java kalau lewat HotSpot itu normalnya tidak pernah berbentuk file. Lalu bentuknya bagaimana? Bentuknya adalah memori. Itu salah satu penyebab Java perlu memori besar. Native code di Java cuma hidup di memori. Ini sebenarnya sama seperti kalau kita pakai VB 6 dan debugging. Pada saat debugging VB 6 normalnya kompilasi ke memori bukan ke file. Makanya debugging VB 6 itu cepat dan menyenangkan. Code native VB 6 hidup cuma di memori pada saat debugging. Kalau kita mau native code itu berbentuk file executable maka kita musti pakai compiler Java macam GCJ atau Jet Excelsior. -Original Message- From: jug-indonesia@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Samuel Franklyn Sent: Thursday, June 05, 2008 10:46 AM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!) Adelwin Handoyo wrote: Kalo dibilang 2 overhead utama java itu membuat lambat... Berarti sebenernya waktu process nya sendiri lebih cepet dong dari C?? Kalau sudah teroptimasi maka Java bisa lebih cepat dari C. Tapi ini bisa lho bukan pasti. Karena proses optimasi dari HotSpot itu sangat kompleks. Ada yang mau di Tanya ke oom sam nih... Optimasi code di java itu all at once di depan... ato dia akan optimize a few blocks of codes in front? Bukan begitu. Tapi lewat cara profiling dan konversi ke native code. Jadi HotSpot compiler Java dari Sun itu dalamnya ada profiler. Pada saat aplikasi dijalankan maka HotSpot akan analisa bagian mana yang lambat dan menentukan apakah bagian yang lambat tersebut bisa di optimasi dengan konversi ke native code. Kalau HotSpot berpendapat bahwa bagian tersebut bisa makin cepat dengan konversi ke native code maka HotSpot akan melakukan konversi ke native code yang teroptimisasi. Konversi ke native code yang teroptimisasi ini mirip kompilasi dari C compiler pakai flag optimisasi. Trik-trik optimisasi native code dari HotSpot tidak kalah dengan trik-trik optimasasi dari C compiler. Tapi HotSpot butuh waktu untuk melakukan profiling dan kompilasi jauh lebih lama dari C compiler. C compiler kan tidak melakukan profiling dan cuma melakukan optimisasi native code.
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Thursday, June 5, 2008, 9:50:32 AM, Adelwin Handoyo wrote: .java khan source tuh... .class itu code nya khan? Lalu yang di sebut native code itu beda lagi khan yah? Native code yang dihasilkan JVM itu sifatnya hybrid, jadi merupakan penggabungan antara bytecode dan codeblock dalam bentuk machine code yang di simpan di memory, besaran komposisi antara machine code dengan byte code ini bergantung pada hasil profiling. kenapa profiling tidak dilakukan di awal saat java mengkompilasi source ke dalam bentuk .class file hal itu karena sifat dari machine code ini adalah processor spesific. jika tidak seperti skr ini, maka akan punya satu keharusan untuk merekompilasi source code anda untuk setiap jenis prosesor yang akan anda gunakan. -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL PROTECTED] Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id Yahoo! Groups Links * To visit your group on the web, go to: http://groups.yahoo.com/group/jug-indonesia/ * Your email settings: Individual Email | Traditional * To change settings online go to: http://groups.yahoo.com/group/jug-indonesia/join (Yahoo! ID required) * To change settings via email: mailto:[EMAIL PROTECTED] mailto:[EMAIL PROTECTED] * To unsubscribe from this group, send an email to: [EMAIL PROTECTED] * Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
gue sendiri bertanya- tanya tentang performance java. dan gue suka merujuk ke performance tuning website dan di sana tidak memberi tahukan tentang BufferedWriter. kaya posting yang kaya gini boleh sering2. Soalnya JAVA mengajarkan programmer untuk hidup bersih. btw masukkan pak Sam di tunggu nih doi soalnya tahu ampe kedalam JAVA. Apakah bener BufferedWriter lebih baik dari pada StringBuffer ? Kalau dari segi performance memang bikin ngiler. btw java champ ngasih solusi yang baik dari pada bales kaya gitu. Kalau memang performance JAVA bisa ditingkatkan kan lebih bagus. Toh thread ini kan membandingkan untuk segi positif kalau menurut gue. Keep posting. -- Salam, Andy Susanto,S.Kom == for better search http://www.slashmysearch.com/earn/id/24828 HP : 081513039998 2008/6/3 Jaimy Azle [EMAIL PROTECTED]: On Monday, June 2, 2008, 6:00:16 PM, Felix Halim wrote: Yang puts di C/C++ juga musti di test ulang... Karena bisa jadi puts() itu nulis ke buffer, lalu buffernya di flush di background. Kalau kita catet waktunya pas puts() return itu akan misleading pula. Lah kan udah dipostingkan potongan code puts kemarin, jadi gak perlu menduga-duga, di sana gak ada pake acara buffer-bufferan, lagian kan sebenarnya gak diduga pun udah missleading dari awal karena test di java pake pendekatan buffered, sementara di C di suruh direct. :) Tapi yang jelas semua yang masuk ke default stream STDOUT pasti akan dibuffer dulu, oleh OS. kalau gak gitu ya akan kelihatan lucu, writing ke screen karakternya keluar satu satu kayak jaman 8086 baheula. Nah untuk yang ini, karena di level OS, baik output dari java ataupun C yang memanfaatkan STDOUT pasti sama, jadi bukan hal yang penting buat jadi pertimbangan. Thread ini menarik hanya dari sisi penelaahan kita untuk mengoptimalkan java, bukan pada sisi pembandingannya dengan C, malah justru sepertinya jauh lebih asyik kalau acuannya menggunakan C source yang fully optimized, semakin jauh bedanya semakin menantang untuk menggali lebih jauh improvement yang mungkin bisa dilakukan di sisi java. :) -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/4 ib solution [EMAIL PROTECTED]: gue sendiri bertanya- tanya tentang performance java. dan gue suka merujuk ke performance tuning website dan di sana tidak memberi tahukan tentang BufferedWriter. linkeln itu 33 juta pake tomcat dan jetty aja loh gue aja gak habis pikir bisa segede ini maklum dulu elasitas kan pake tomcat buat forum.nokia.com ancur, pake jsp abis disana dipindah ke weblogic jalan tuh sampe sekarang maklum itu web kan buatan indo
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
ib solution wrote: gue sendiri bertanya- tanya tentang performance java. dan gue suka merujuk ke performance tuning website dan di sana tidak memberi tahukan tentang BufferedWriter. kaya posting yang kaya gini boleh sering2. Soalnya JAVA mengajarkan programmer untuk hidup bersih. btw masukkan pak Sam di tunggu nih doi soalnya tahu ampe kedalam JAVA. Apakah bener BufferedWriter lebih baik dari pada StringBuffer ? Kalau dari segi performance memang bikin ngiler. btw java champ ngasih solusi yang baik dari pada bales kaya gitu. Kalau memang performance JAVA bisa ditingkatkan kan lebih bagus. Toh thread ini kan membandingkan untuk segi positif kalau menurut gue. Keep posting. Masukan gua sama dengan masukan Frans. Tapi mungkin akan gua perjelas sedikit. Micro benchmark itu tidak berguna. Benchmark yang kompleks macam TPC-C saja cuma sedikit berguna. Lalu benchmark macam apa yang berguna? Benchmark aplikasi anda sendiri. Kalau hari ini aplikasi anda kecepatannya 1 lalu anda bisa optimasi sehingga kecepatannya 2 nah itu sudah cukup hebat. Aplikasi dunia nyata itu kompleks dan susah sekali di optimasi. Effort berbulan-bulan kadang cuma menaikkan performance 10-20%.
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Wednesday, June 4, 2008, 9:15:29 AM, Samuel Franklyn wrote: Kalau hari ini aplikasi anda kecepatannya 1 lalu anda bisa optimasi sehingga kecepatannya 2 nah itu sudah cukup hebat. Aplikasi dunia nyata itu kompleks dan susah sekali di optimasi. Effort berbulan-bulan kadang cuma menaikkan performance 10-20%. Kalau itu asalnya dari working dan already optimized app, itu sangat-sangat hebat. cukup hebat adalah untuk kategori app yang just work menjadi optimized. :) btw, emang optimasi seharusnya memang bukan merupakan task yang menjadi tujuan utama, melainkan additive value dari sebuah proses yang berkesinambungan. Optimasi bahkan kalau bisa jangan jadi fokus kalau development process adalah project based, karena akan membuat deadline jadi kedodoran, dan kalaupun deadline tercapai, projectnya yang keburu usai. Kecuali kalau aplikasi merupakan tipikal dari sebuah continous development (internal usage, atau dijual sendiri spt accurate) boleh lah dimasukan sebagai bagian dari agenda. -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Monday, June 2, 2008, 1:30:24 PM, imam baihaqi wrote: kl gitu kayaknya lebih sesuai yg dibandingin puts itu sysout.print, bukan sysout.println, soalnya ga pake new line, mungkin bisa lebih cepet lagi. puts akan menambahkan newline juga. ini potongan source-nya puts kalau mau dibandingkan sendiri. len = _tcslen(s); if ((int)__fputn(s,len,stdout) == len _lputc('\n',stdout) == '\n') rc = '\n'; else rc = EOF; -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Monday, June 2, 2008, 1:53:29 PM, Felix Halim wrote: Jadi tidak perlu lagi dibandingkan puts nya C/C++ dengan System.out.print. Tandingannya puts nya C/C++ sekarang adalah BufferedWriter. System.out.print teralu lambat! Bukannya System.out itu defaultnya sudah menggunakan BufferedWriter juga? letak permasalahannya, System.out.print melakukan flush buffer setiap kali selesai mempassing sebuah string, sementara contoh yang anda buat itu, flush buffer dilakukan secara otomatis, yaitu saat stream di close saat object di destroy. -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/2 Jaimy Azle [EMAIL PROTECTED]: Bukannya System.out itu defaultnya sudah menggunakan BufferedWriter juga? letak permasalahannya, System.out.print melakukan flush buffer setiap kali selesai mempassing sebuah string, sementara contoh yang anda buat itu, flush buffer dilakukan secara otomatis, yaitu saat stream di close saat object di destroy. Betul, flushing setiap kali dipanggil adalah hal yang buruk untuk kasus ini. Makanya code oleh Feris Thia diatas flush() nya dipanggil manual setiap 2000x iterations. Sedangkan BufferedWriter flush() nya tergantung buffernya sudah penuh atau belum. Apakah anda yakin System.out menggunakan BufferedWriter? Tolong di cek lagi. Saya lihat source code System.out nya di java.lang.System itu classnya adalah PrintStream bukan BufferedWriter (meskipun PrintStream menggunakan buffer juga). BufferedWriter yang saya maksud adalah java.io.BufferedWriter Bukan sekedar writer yang di buffer loh :P Felix Halim
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Monday, June 2, 2008, 2:31:26 PM, Felix Halim wrote: Apakah anda yakin System.out menggunakan BufferedWriter? Tolong di cek lagi. Saya lihat source code System.out nya di java.lang.System itu classnya adalah PrintStream bukan BufferedWriter (meskipun PrintStream menggunakan buffer juga). positive. kalau anda juga lihat source code-nya, hal itu bisa anda temukan di bagian initialisasi. private void init(OutputStreamWriter osw) { this.charOut = osw; this.textOut = new BufferedWriter(osw); } Jadi pada dasarnya sama saja, permasalahannya cuma ada di flushBuffer. -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
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(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; 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
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
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(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; 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
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/2 Jaimy Azle [EMAIL PROTECTED]: On Monday, June 2, 2008, 2:31:26 PM, Felix Halim wrote: Apakah anda yakin System.out menggunakan BufferedWriter? Tolong di cek lagi. Saya lihat source code System.out nya di java.lang.System itu classnya adalah PrintStream bukan BufferedWriter (meskipun PrintStream menggunakan buffer juga). positive. kalau anda juga lihat source code-nya, hal itu bisa anda temukan di bagian initialisasi. private void init(OutputStreamWriter osw) { this.charOut = osw; this.textOut = new BufferedWriter(osw); } Jadi pada dasarnya sama saja, permasalahannya cuma ada di flushBuffer. Saya tidak yakin 100% positive. Kalau anda lihat source di java.lang.System, sepertinya System.out tidak di-inisialisasi oleh PrintStream instance secara langsung: public final static PrintStream out = nullPrintStream(); System.out ternyata di-init dengan null pada awalnya. But HEY! itu kan final ? berarti System.out itu selamanya adalah null? Tidak juga... kalau kita lihat lagi, ternyata System.out itu bakal di init ditempat lain. Lihat comment dari nullInputStream(): /** * The following two methods exist because in, out, and err must be * initialized to null. The compiler, however, cannot be permitted to * inline access to them, since they are later set to more sensible values * by initializeSystemClass(). */ private static InputStream nullInputStream() throws NullPointerException Ternyata System.out itu di set oleh method initializeSystemClass() nantinya. Kalau kita telusuri, ternyata ada baris: setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); Yang sepertinya bakal nge set System.out Nah, disini object PrintStream dibuat, dan tentu saja (seperti yang anda katakan) constructor itu akan nge wrap lagi dengan BufferedWriter (saya setuju). Tetapi, method setOut0 sepertinya adalah NATIVE code: private static native void setOut0(PrintStream out); Nah, disini yang saya ragu. Entah apa yang dilakukan si Native code itu? Apakah anda yakin BufferedWriter akan tetap dipakai? Atau bakal direplace oleh Native code nantinya? Observasi ke-2 adalah : setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); Length 128 itu apakah penyebabnya? 128 saya kira teralu kecil buffernya? Sehingga flushnya juga kebanyakan nantinya... Sekali lagi, ini kalau memang object ini tidak direplace oleh Native code. Ada yang tahu apa yang dilakukan si native code terhadap object PrintStream diatas? Felix Halim
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Sip Felix, Keren, thanks buat infonya ;) Regards, Feris Felix Halim wrote: 2008/6/2 Felix Halim [EMAIL PROTECTED] mailto:felix.halim%40gmail.com: 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(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; 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 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
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Berikut adalah updated summary dari runtime untuk 1 juta kali print felix\n. Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama. - C/C++ fputs(felix) = 0.055 secs - C/C++ fprintf(felix\n) = 0.055 secs (gak beda pake -O3) - Java System.out.print(felix\n) = 5.227 secs - Java System.out.println(felix) = 9.774 secs - Java 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 0.273 secs - Java 1 juta kali append di StringBuilder + 1x System.out.println (Java) = 0.220 secs - Java PrintWriter = 0.218 secs - Java BufferedWriter = 0.186 secs - Java NIO = 0.857 secs Java NIO dalam hal ini malah lebih lambat. Mungkin saya masih blum bisa memakai Java NIO dengan benar... Berikut code Java NIO nya (sama sih sama sebelumnya). Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1. FileOutputStream fout = new FileOutputStream(speednio.out); FileChannel fc = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; j++) buffer.put(msg); buffer.flip(); fc.write(buffer); } fout.close(); Solusi terbaik masih BufferedWriter :D Yang roughly 3-4 kali lebih lambat dari puts. Felix Halim
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Berikut adalah updated summary dari runtime untuk 1 juta kali print felix\n. Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama. - C/C++ fputs(felix) = 0.055 secs - C/C++ fprintf(felix\n) = 0.055 secs (gak beda pake -O3) - Java System.out.print(felix\n) = 5.227 secs - Java System.out.println(felix) = 9.774 secs - Java 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 0.273 secs - Java 1 juta kali append di StringBuilder + 1x System.out.println (Java) = 0.220 secs - Java PrintWriter = 0.218 secs - Java BufferedWriter = 0.186 secs - Java NIO = 0.857 secs Java NIO dalam hal ini malah lebih lambat. Mungkin saya masih blum bisa memakai Java NIO dengan benar... Berikut code Java NIO nya (sama sih sama sebelumnya). Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1. FileOutputStream fout = new FileOutputStream(speednio.out); FileChannel fc = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(6); byte[] msg = felix\n.getBytes(); for (int i=0; i100; i++){ buffer.clear(); for (int j=0; j1; j++) buffer.put(msg); buffer.flip(); fc.write(buffer); } fout.close(); Solusi terbaik masih BufferedWriter :D Yang roughly 3-4 kali lebih lambat dari puts. Felix Halim
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
2008/6/2 Felix Halim [EMAIL PROTECTED]: Berikut adalah updated summary dari runtime untuk 1 juta kali print felix\n. Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama. - C/C++ fputs(felix) = 0.055 secs - C/C++ fprintf(felix\n) = 0.055 secs (gak beda pake -O3) - Java System.out.print(felix\n) = 5.227 secs - Java System.out.println(felix) = 9.774 secs - Java 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 0.273 secs - Java 1 juta kali append di StringBuilder + 1x System.out.println (Java) = 0.220 secs - Java PrintWriter = 0.218 secs - Java BufferedWriter = 0.186 secs - Java NIO = 0.857 secs garing garing :) mau java lelet kek, apa kek :) dg variasi os yg naik terus, linux yang naik pasarnya solaris yang enterprise semakin hari semakin niche market c++ ada pasar di niche, java juga di niche, flash aja pakai actionscript yang vmnya lebih lelet dapat pasar ini python aja yang konon lambat , malah google app engine F
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
Walah... Python mah dari dulu main language di Google Frans :) Dan saya makin suka neh dengan Python setelah sekitar 2 bulan ini main di Google AppEngine, simple - straight forward dan sebagai bahasa yang punya fitur bagus. Dan, kenapa pilih Python ? Ini sepertinya.. sepertinya loh, ada erat kaitannya dengan Google Big Table (http://labs.google.com/papers/bigtable.html). Regards, Feris http://business-intelligence.phi-integration.com http://blog.komputasiawan.com http://pintar-java.blogspot.com Frans Thamura wrote: garing garing :) mau java lelet kek, apa kek :) dg variasi os yg naik terus, linux yang naik pasarnya solaris yang enterprise semakin hari semakin niche market c++ ada pasar di niche, java juga di niche, flash aja pakai actionscript yang vmnya lebih lelet dapat pasar ini python aja yang konon lambat , malah google app engine F __._, e mailto:[EMAIL PROTECTED] Recent Activity * 16 New Members http://groups.yahoo.com/group/jug-indonesia/members;_ylc=X3oDMTJmcHFyOTNzBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEyMTI0MDg4MjE- Visit Your Group http://groups.yahoo.com/group/jug-indonesia;_ylc=X3oDMTJlajQ2dGEyBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTIxMjQwODgyMQ-- Yahoo! Finance It's Now Personal http://us.ard.yahoo.com/SIG=13o8cil09/M=493064.12016257.12445664.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212416021/L=/B=Xj3SAkJe5tM-/J=1212408821908198/A=4507179/R=0/SIG=12de4rskk/*http://us.rd.yahoo.com/evt=50284/*http://finance.yahoo.com/personal-finance Guides, news, advice more. Need traffic? Drive customers http://us.ard.yahoo.com/SIG=13ot8gv08/M=493064.12016308.12445700.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212416021/L=/B=Xz3SAkJe5tM-/J=1212408821908198/A=3848644/R=0/SIG=131l83flq/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2006cmp=Yahooctv=Groups5s=Ys2=s3=b=50 With search ads on Yahoo! Yahoo! Groups Come check out http://us.ard.yahoo.com/SIG=13oaritpp/M=493064.12662709.12980595.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212416021/L=/B=YD3SAkJe5tM-/J=1212408821908198/A=5349282/R=0/SIG=11ks6tatn/*http://advision.webevents.yahoo.com/HealthyLiving/ featured healthy living groups on Yahoo! .
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Monday, June 2, 2008, 6:00:16 PM, Felix Halim wrote: Yang puts di C/C++ juga musti di test ulang... Karena bisa jadi puts() itu nulis ke buffer, lalu buffernya di flush di background. Kalau kita catet waktunya pas puts() return itu akan misleading pula. Lah kan udah dipostingkan potongan code puts kemarin, jadi gak perlu menduga-duga, di sana gak ada pake acara buffer-bufferan, lagian kan sebenarnya gak diduga pun udah missleading dari awal karena test di java pake pendekatan buffered, sementara di C di suruh direct. :) Tapi yang jelas semua yang masuk ke default stream STDOUT pasti akan dibuffer dulu, oleh OS. kalau gak gitu ya akan kelihatan lucu, writing ke screen karakternya keluar satu satu kayak jaman 8086 baheula. Nah untuk yang ini, karena di level OS, baik output dari java ataupun C yang memanfaatkan STDOUT pasti sama, jadi bukan hal yang penting buat jadi pertimbangan. Thread ini menarik hanya dari sisi penelaahan kita untuk mengoptimalkan java, bukan pada sisi pembandingannya dengan C, malah justru sepertinya jauh lebih asyik kalau acuannya menggunakan C source yang fully optimized, semakin jauh bedanya semakin menantang untuk menggali lebih jauh improvement yang mungkin bisa dilakukan di sisi java. :) -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster
Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)
On Monday, June 2, 2008, 11:10:00 AM, Felix Halim wrote: Dengan demikian saya pikir System.out.println nya java menggunakan printf nya C/C++, bukan puts. System.out.println defaultnya tidak menggunakan rutin printf C, tapi murni merupakan implementasi based on java, kenapa lebih lambat karena bahkan untuk println pun di java harus melewati banyak layer class terkait dengan fungsionalitas yang ada pada default PrintStream class itu, sementara implementasi di C jauh lebih sederhana (primitif), string langsung dipassing ke STDOUT. -- Salam, -Jaimy Azle Great new ideas usually come from very small teams... don't give up so easily. -- John Kaster