Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik sm96
coba cari banyak-banyak informasi.
System.out.println() sangat tidak direkomendasikan untuk dipakai
pada sistem yg 'resource-intensive'.
Jadi kalo sampe ada yg bandingin System.out.println() dengan cputs()
hmmm... basi dah... yg bikin juga udah tahu.
Kayak bandingin gajah sama semut.
System.out.println() di java tidaklah benar-benar analog dengan cputs().
Lha, sama printf() aja gak sebanding kok.
Hayo, kenapa coba?
Gimanapun juga, ada sisi menangnya bagi System.out.println(). (cari dong?)
Yang mana keunggulan System.out.println() ini bisa bikin kalang kabut cputs(),
dan cputs sendiri bakal butuh puluhan temen-temennya yang lain.
Hayo, apa coba cari dong? :D


2008/6/2 Feris Thia [EMAIL PROTECTED]:
 Wow... kalau saya cara pikirnya bukan seperti itu, suer :)

 Kalau saya berkepentingan dengan solusi yang kita berikan sebagai
 provider/vendor IT.

 Kita selalu setuju, tidak ada solusi yang perfect kan ? Tapi dari eksplorasi
 si Felix ini saya kok setuju amat ya ? Karena untuk hal trivial I/O seperti
 ini kalau kita tidak tahu tingkat performancenya maka kita tidak akan pernah
 tahu jika suatu hari itu akan menjadi bottleneck.

 Bayangkan sudah terlibat project besar dan menggunakan framework2 canggih
 tapi performance down dan kita bengong... eh, tau-taunya karena
 System.out.println atau karena kita tidak tau cara menggunakan printwriter ?
 hehehe

 Kalau untuk kalah-kalahan, ga usah topik ini aja... banyak topik yang bisa
 kita jadikan ajang itu, tapi apa yang didapatkan ? Cuma emosi 'menang' dan
 'kalah' ? :p hehehe

 Just my 2 cents :)

 Regards,

 Feris

 2008/6/1 sm96 [EMAIL PROTECTED]:

 ini bukan cara sebanding buat kalah-kalahan
 java dibikin bagus bisa, dibikin ancur juga bisa
 c/c++ juga demikian



 --
 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
 



-- 
syaiful.mukhlis
gtalk:[EMAIL PROTECTED]


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Frans Thamura
2008/6/2 Sukma Agung Verdianto [EMAIL PROTECTED]:
 Jadi penasaran... tadi coba pake
 - System.out.print(felix\n);
 sama
 - System.out. println(felix);


hari gini masih ada yang banding system out println :)

F


[JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
Contoh code C/C++ untuk melakukan puts sebanyak 1 juta kali:

for (int i=0; i100; i++)
puts(felix);


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

for (int i=0; i100; 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; i100; 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


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Jecki Sumargo
2008/6/2 Felix Halim [EMAIL PROTECTED]:
 Contoh code C/C++ untuk melakukan puts sebanyak 1 juta kali:

 for (int i=0; i100; i++)
 puts(felix);

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

 for (int i=0; i100; 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?


Pertama, karena platform java itu managed environment maka pada saat
startup banyak aspek yang disiapkan oleh JVM. Untuk detailnya sendiri
saya tidak begitu jelas, tapi kira2 di gambaran saya dia harus siapkan
table reference object, spawn thread baru untuk garbage collector
(CMMIIW). Ini pastinya menjadi overhead setiap program java.

Kedua, karena java bermain dengan bytecode maka perlu ada translasi
dari bytecode untuk menjadi native code. Jelas saja ini berarti ada
overhead untuk setiap eksekusi kode program. Untuk itu muncul optimasi
Just In Time compiler, di mana JVM akan menganalisa code yang sering
dieksekusi (misal: 1 kali eksekusi) dan melakukan optimasi, di
antaranya dengan menyimpan native code dari bytecode tersebut sehingga
tidak perlu ada overhead untuk translasi lagi. Untuk hal ini ada
pilihan tuning yg bisa dilakukan.

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

 StringBuffer sb = new StringBuffer();
 for (int i=0; i100; 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?


IMO dalam hal ini java tidak bisa dibandingkan dengan C/C++. Target
pengguna platformnya sendiri jelas berbeda. Java ditujukan untuk
memudahkan pembuatan program yang agar programmer misalnya tidak perlu
repot dengan memory management. Sedangkan C/C++ lebih untuk problem
yang low level atau yang butuh keuntungan (kecepatan) dari native
binary misalnya driver, DLL library, game programming, real time
programming. Meskipun bisa saja kita melihat Java dipakai untuk game
programming dan program enterprise dibuat dengan C/C++.

 Felix Halim

Regards,
Jecki


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Feris Thia
Felix,

Tantangan menarik ;)

Code gue ini lulus ga ? = http://pastebin.com/m4f36f681

Atau kalo gue paste disini :

package test.io;

import java.io.PrintWriter;
import java.text.DecimalFormat;

public class FelixIO {
public static void main(String[] args) {
//Mencatat waktu awal proses

long waktuMulai= System.currentTimeMillis();
PrintWriter out = new PrintWriter(System.out);

for (int i = 0; i = 100; i++) {
out.write(felix\n,0,6);
if(i==2000) out.flush();
}

//Mencatat waktu akhir proses
long waktuSelesai = System.currentTimeMillis();

double newRunTime = (double)(waktuSelesai - waktuMulai) / 1000;
DecimalFormat runtimeDF = new DecimalFormat(##0.00);

out.println(Durasi ekseksi :  +
runtimeDF.format(newRunTime) +
 detik);
out.flush();
out.close();
}
}


Regards,

Feris



-- 
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] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Feris Thia [EMAIL PROTECTED]:
 Code gue ini lulus ga ? = http://pastebin.com/m4f36f681

Yup code kamu keliatannya kencang :)

Solusi PrintWriter lebih cepat daripada StringBuilder, runtimenya 0.321 seconds.
Tetapi keliahatannya PrintWriter harus manage buffernya sendiri yah.

Saya coba BufferedWriter lebih cepat sedikit, runtimenya 0.246 seconds.

Kelihatannya sampai saat ini solusi tercepat adalah menggunakan BufferedWriter.
Codenya sebagai berikut:


BufferedWriter bw = new BufferedWriter(new 
OutputStreamWriter(System.out));
for (int i=0; i100; i++)
bw.write(felix\n);


Internal buffernya saya tidak tahu sebesar apa, tapi harusnya cukup
memory efisien.

Runtime terbaiknya Java (sampai saat ini) masih lebih lamban 4.4 kali
daripada puts nya C/C++.
Tapi saya kira ini sudah cukup bagus.

Hal yang sama berlaku untuk baca input.
Menggunakan BufferedReader jauh lebih cepat dari pada langsung
menggunakan Scanner.

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Feris Thia
Wow.. belum tidur?

Sama dong... hehehe

O iya, pakai thread boleh ga ? kalau boleh, ini ada code saya berikut.. coba
gabungkan dengan code kamu.. mungkin bisa lebih kencang lagi ? ;)

=
package test.io;

public class JajalIO {
public static void main(String[] args) {
for(int i=1;i=10;i++)
{
ConsumeThread.getThread(10).start();
}
  }
}
=
package test.io;

import java.io.PrintWriter;

public class ConsumeThread extends Thread {
int mycounter;
int batas;
PrintWriter out;

private ConsumeThread(int c)
{
out = new PrintWriter(System.out);
batas = c;
mycounter=0;
}

public void run()
{
while(mycounterbatas) {
mycounter++;
out.write(Felix\n,0,6);
if(mycounter==500) out.flush();
}
if(mycounter(batas-500)) out.flush();
}

public static ConsumeThread getThread(int c)
{
return new ConsumeThread(c);
}
}


2008/6/1 Felix Halim [EMAIL PROTECTED]:


 




-- 
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] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Jecki Sumargo [EMAIL PROTECTED]:
 Pertama, karena platform java itu managed environment maka pada saat
 startup banyak aspek yang disiapkan oleh JVM. Untuk detailnya sendiri
 saya tidak begitu jelas, tapi kira2 di gambaran saya dia harus siapkan
 table reference object, spawn thread baru untuk garbage collector
 (CMMIIW). Ini pastinya menjadi overhead setiap program java.

Betul, tapi 10 detik lebih lambat itu pasti ada apa2nya.
Dan terjadi pada hal yang trivial seperti System.out.println bukanlah
sesuatu yang bisa di-ignore begitu saja.


 Kedua, karena java bermain dengan bytecode maka perlu ada translasi
 dari bytecode untuk menjadi native code. Jelas saja ini berarti ada
 overhead untuk setiap eksekusi kode program. Untuk itu muncul optimasi
 Just In Time compiler, di mana JVM akan menganalisa code yang sering
 dieksekusi (misal: 1 kali eksekusi) dan melakukan optimasi, di
 antaranya dengan menyimpan native code dari bytecode tersebut sehingga
 tidak perlu ada overhead untuk translasi lagi. Untuk hal ini ada
 pilihan tuning yg bisa dilakukan.


Tuning apakah yang bisa digunakan untuk mempercepat I/O seperti problem diatas?



 IMO dalam hal ini java tidak bisa dibandingkan dengan C/C++. Target
 pengguna platformnya sendiri jelas berbeda. Java ditujukan untuk
 memudahkan pembuatan program yang agar programmer misalnya tidak perlu
 repot dengan memory management.


Betul, tetapi sejauh apakah Java bisa melambat karenanya?
Dan teknik apa sajakah yang bisa kita lakukan untuk mempercepatnya?
Itu yang sekarang lagi saya bahas :)


 Sedangkan C/C++ lebih untuk problem
 yang low level atau yang butuh keuntungan (kecepatan) dari native
 binary misalnya driver, DLL library, game programming, real time
 programming. Meskipun bisa saja kita melihat Java dipakai untuk game
 programming dan program enterprise dibuat dengan C/C++.

+1

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
Penggunaan 10 threads untuk output masing2 100,000 baris tidak lebih
cepat dari single thread.

Err.. tujuan saya ini untuk mencari tahu apa yang membuat puts begitu
cepat (4.4 kali dari System.out.println nya Java)
Java gak boleh maen licik pake multi-threading donk :P hehe.

Felix Halim


2008/6/2 Feris Thia [EMAIL PROTECTED]:
 Wow.. belum tidur?

 Sama dong... hehehe

 O iya, pakai thread boleh ga ? kalau boleh, ini ada code saya berikut.. coba
 gabungkan dengan code kamu.. mungkin bisa lebih kencang lagi ? ;)

 =
 package test.io;

 public class JajalIO {
 public static void main(String[] args) {
 for(int i=1;i=10;i++)
 {
 ConsumeThread.getThread(10).start();
 }
   }
 }
 =
 package test.io;

 import java.io.PrintWriter;

 public class ConsumeThread extends Thread {
 int mycounter;
 int batas;
 PrintWriter out;

 private ConsumeThread(int c)
 {
 out = new PrintWriter(System.out);
 batas = c;
 mycounter=0;
 }

 public void run()
 {
 while(mycounterbatas) {
 mycounter++;
 out.write(Felix\n,0,6);
 if(mycounter==500) out.flush();
 }
 if(mycounter(batas-500)) out.flush();
 }

 public static ConsumeThread getThread(int c)
 {
 return new ConsumeThread(c);
 }
 }


 2008/6/1 Felix Halim [EMAIL PROTECTED]:




 --
 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] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Feris Thia
I see,

Ok de kalo gitu ;)

Tapi ini juga karena implementasi multi threading di c/c++ susah banget ya ?
:p hehehe

Jadi +1 untuk Java ?

Dan ada 2 note lagi, bisa coba dumping ke text file.. kecepatannya sama ga
ya ? = ini benar2 pertanyaan benchmarking, soalnya karena saya di BI jadi
sangat berkepentingan, contohnya untuk performance data staging. Walau saya
mungkin ga pernah sentuh C/C++ tapi kan di Java bisa menggunakan native
api... jadi mungkin ada gunanya. hehe, tapi kalo ga sempat gapapa... it's
just a casual - nice to have one.

kedua= java 7 katanya akan memiliki io baru. Coba search di youtube untuk
google tech talk dan sun java new io (nio). Youtube lagi lelet banget di
sini jadi gue ga bisa kasih urlnya :(

Regards,

Feris

2008/6/1 Felix Halim [EMAIL PROTECTED]:

   Penggunaan 10 threads untuk output masing2 100,000 baris tidak lebih
 cepat dari single thread.

 Err.. tujuan saya ini untuk mencari tahu apa yang membuat puts begitu
 cepat (4.4 kali dari System.out.println nya Java)
 Java gak boleh maen licik pake multi-threading donk :P hehe.

 Felix Halim

-  10
New 
 Membershttp://groups.yahoo.com/group/jug-indonesia/members;_ylc=X3oDMTJmYnYyaW5qBF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEyMTIzNDMwNjE-

  Visit Your Group
 http://groups.yahoo.com/group/jug-indonesia;_ylc=X3oDMTJlMDR2Y3I2BF9TAzk3MzU5NzE0BGdycElkAzk4Nzc3NDAEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTIxMjM0MzA2MQ--
  Yahoo! Finance

 It's Now 
 Personalhttp://us.ard.yahoo.com/SIG=13oelkud2/M=493064.12016257.12445664.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212350262/L=/B=BeRpAkJe5FY-/J=1212343062007719/A=4507179/R=0/SIG=12de4rskk/*http://us.rd.yahoo.com/evt=50284/*http://finance.yahoo.com/personal-finance

 Guides, news,

 advice  more.
  New business?

 Get new 
 customers.http://us.ard.yahoo.com/SIG=13o3lnr4f/M=493064.12016308.12445700.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212350262/L=/B=BuRpAkJe5FY-/J=1212343062007719/A=3848640/R=0/SIG=131an6mds/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2002cmp=Yahooctv=Groups1s=Ys2=s3=b=50

 List your web site

 in Yahoo! Search.
  Best of Y! Groups

 Check it 
 outhttp://us.ard.yahoo.com/SIG=13ogvcrg9/M=493064.12016306.12445698.8674578/D=groups/S=1705006905:NC/Y=YAHOO/EXP=1212350262/L=/B=B.RpAkJe5FY-/J=1212343062007719/A=4763759/R=0/SIG=11ou7otip/*http://advision.webevents.yahoo.com/bestofyahoogroups/

 and nominate your

 group to be featured.
   .

 




-- 
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] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Sukma Agung Verdianto
Jadi penasaran... tadi coba pake- System.out.print(felix\n);
sama
- System.out. println(felix);

yang pertama selesai sekitar 10s yang kedua sekitar 18s, ininya aja bedanya
lumayan banyak.
byw, kok angkanya jauh ya :O???
Itu pake hardware apa ya :O? OS-nya apa? mungkin menggunakan rasio jadi
lebih jelas karena speednya relatif?

Kalo ceritanya kayak diatas... keknya kudu bedah JVM... and some core
classes-nya Java.

Regards,
Sukma

2008/6/1 Felix Halim [EMAIL PROTECTED]:

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

 for (int i=0; i100; i++)
puts(felix);


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

 for (int i=0; i100; 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; i100; 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




Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik sm96
ini bukan cara sebanding buat kalah-kalahan
java dibikin bagus bisa, dibikin ancur juga bisa
c/c++ juga demikian

2008/6/2 Feris Thia [EMAIL PROTECTED]:
 Felix,

 Tantangan menarik ;)

 Code gue ini lulus ga ? = http://pastebin.com/m4f36f681

 Atau kalo gue paste disini :

 package test.io;

 import java.io.PrintWriter;
 import java.text.DecimalFormat;

 public class FelixIO {
 public static void main(String[] args) {
 //Mencatat waktu awal proses

 long waktuMulai= System.currentTimeMillis();
 PrintWriter out = new PrintWriter(System.out);

 for (int i = 0; i = 100; i++) {
 out.write(felix\n,0,6);
 if(i==2000) out.flush();
 }

 //Mencatat waktu akhir proses
 long waktuSelesai = System.currentTimeMillis();

 double newRunTime = (double)(waktuSelesai - waktuMulai) / 1000;
 DecimalFormat runtimeDF = new DecimalFormat(##0.00);

 out.println(Durasi ekseksi :  +
 runtimeDF.format(newRunTime) +
  detik);
 out.flush();
 out.close();
 }
 }


 Regards,

 Feris



 --
 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

 



-- 
syaiful.mukhlis
gtalk:[EMAIL PROTECTED]


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik sm96
berawal dari paradigma yg berbeda, tidak bisa asal diuji dengan sembarang cara.

2008/6/2 Sukma Agung Verdianto [EMAIL PROTECTED]:
 Jadi penasaran... tadi coba pake

 - System.out.print(felix\n);
 sama
 - System.out. println(felix);
 yang pertama selesai sekitar 10s yang kedua sekitar 18s, ininya aja bedanya
 lumayan banyak.
 byw, kok angkanya jauh ya :O???
 Itu pake hardware apa ya :O? OS-nya apa? mungkin menggunakan rasio jadi
 lebih jelas karena speednya relatif?
 Kalo ceritanya kayak diatas... keknya kudu bedah JVM... and some core
 classes-nya Java.
 Regards,
 Sukma
 2008/6/1 Felix Halim [EMAIL PROTECTED]:

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

 for (int i=0; i100; i++)
puts(felix);


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

 for (int i=0; i100; 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; i100; 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

 



-- 
syaiful.mukhlis
gtalk:[EMAIL PROTECTED]


RE: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Ilhamsyah Edwar
Sudah coba pake parameter -server pada saat run?
# java -server class

Kalo mau lebih cepet lagi, coba pake IBM JDK (versi 1.4) deh. Bisa 2x
lebih cepat daripada C++


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 sm96 [EMAIL PROTECTED]:
 ini bukan cara sebanding buat kalah-kalahan
 java dibikin bagus bisa, dibikin ancur juga bisa
 c/c++ juga demikian

Kenapa tidak sebanding? println dan puts secara logika equivalent kok.
Kenapa di Java begitu lambat?

Java lebih gampang hancur daripada C/C++ (dalam soal performance).

Contoh, tadi saya barusan nge-test C/C++ puts diganti jadi printf,
kecepatannya melamban dari 0.055 menjadi 0.220 secs.
Tetapi setelah saya nyalakan compiler optimization -O3,
code printf nya jadi kenceng lagi seperti code puts, yaitu 0.055.

Mungkin compiler optimization nya C/C++ bisa ubah printf menjadi puts
where applicable.


Sedangkan di Java, mana bisa compiler optimizationnya ngubah dari
System.out.println menjadi pake BufferedWriter ?

Jadi di Java performance optimizationnya saya kira masih perlu ditingkatkan.


2008/6/2 sm96 [EMAIL PROTECTED]:
 2008/6/2 Sukma Agung Verdianto [EMAIL PROTECTED]:
  Jadi penasaran... tadi coba pake
 
  - System.out.print(felix\n);
  sama
  - System.out. println(felix);

 berawal dari paradigma yg berbeda, tidak bisa asal diuji dengan sembarang 
 cara.

Jadi kamu menerima apa adanya bahwa Java lambat?
Jika tidak, coba tolong kasih cara yang tidak sembarangan untuk
menguji paradigma berbeda ini.
Diatas, kenapa kamu mengatakan kalo membandingkan:

System.out.print(felix\n)

dengan

System.out. println(felix)

adalah cara yang sembarangan?

(itu lho yang saya tangkep, kalau salah mohon di-koreksi).

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Ilhamsyah Edwar [EMAIL PROTECTED]:
 Sudah coba pake parameter -server pada saat run?
 # java -server class

Saya coba command diatas keluarnya:

Error: no `server' JVM at `C:\PROGRA~1\Java\JRE16~2.0_0\bin\server\jvm.dll'.

Mungkin ini cocok untuk membuka thread baru untuk membahas:
apa keuntungan -server dibanding tidak pakai.


 Kalo mau lebih cepet lagi, coba pake IBM JDK (versi 1.4) deh. Bisa 2x
 lebih cepat daripada C++

Saya tidak punya IBM JDK, mungkin yang punya bisa coba test kalu sempat?


Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Jecki Sumargo
2008/6/2 Felix Halim [EMAIL PROTECTED]:
 2008/6/2 Ilhamsyah Edwar [EMAIL PROTECTED]:

 Sudah coba pake parameter -server pada saat run?
 # java -server class

 Saya coba command diatas keluarnya:

 Error: no `server' JVM at `C:\PROGRA~1\Java\JRE16~2.0_0\bin\server\jvm.dll'.

 Mungkin ini cocok untuk membuka thread baru untuk membahas:
 apa keuntungan -server dibanding tidak pakai.


Ini salah satu option tuning JIT compiler. Pilihannya ada -server dan
-client (sepertinya Sun JVM specific). JIT itu bekerja mengubah
bytecode menjadi native. Tapi berhubung ini akan menimbulkan overhead
maka ada mekanisme untuk menunggu sampai method tersebut dipanggil X
kali sebelum bytecodenya ditranslasi jadi native code. Nah angka X ini
yang berbeda antara option -server dan -client, hanya saya tidak tahu
detailnya. Silakan dicari di google.

Saya ketemu satu link yg bagus tentang JIT
http://publib.boulder.ibm.com/infocenter/javasdk/v1r4m2/index.jsp?topic=/com.ibm.java.doc.diagnostics.142j9/html/id1218.html.

 Kalo mau lebih cepet lagi, coba pake IBM JDK (versi 1.4) deh. Bisa 2x
 lebih cepat daripada C++

 Saya tidak punya IBM JDK, mungkin yang punya bisa coba test kalu sempat?

 Felix Halim