gcj's IO performance vs blackdown JDK

Christopher Marshall christopherlmarshall@yahoo.com
Mon Dec 1 16:07:00 GMT 2003


All:
I have noticed that the blackdown JDK's file reading performance is roughly three 
times as fast as libgcj's, when measured by simple line counting programs. 
I ran my test with gcj 3.2.2.
I have written a lot of programs that process huge text files a line 
at a time at my work that are 2 to three times slower running under gcj than running under
the JDK and I am pretty sure this I/O issue is the cause.
I would love to ditch the JDK in favor of gcj but can't because of this 
performance issue.
I wrote a bash script and a pair of simple java programs to verify this which 
I have included below. I have marked the beginning of each file with the 
filename pre and post-fixed with "--". The files/marks are these
--run_benchmark--
--Hashgen.java--
--line_count.java--
run_benchmark is the bash script. line_count.java is the line counting program.
Hashgen.java generates the text file read by line_count.java.
run_benchmark uses Hashgen.java to generate a 100000 line text file with 1000 
character lines. On my machine (433 Mhz celeron dell laptop running slackware
linux 9.0), it takes the JDK 11.1 seconds to run line_count against the file
and it takes the gcj compiled version 34.6 seconds.
The corresponding C line counting program, just for kicks, takes 1.2 seconds to run.
Chris Marshall
--run_banchmark--
#!/bin/bash
function compile_gcj {
 local class=1ドル
 gcj -c ${class}.java
 gcj --main=${class} -o ${class} ${class}.o
}
compile_gcj Hashgen
compile_gcj line_count
javac line_count.java
data_file="data1.txt"
fill_char="a"
postfix="1"
line_length=1000
num_uniq_lines=200
num_lines=100000
echo "generating data file"
Hashgen $fill_char $postfix $line_length $num_uniq_lines $num_lines > $data_file
echo "running gcj version"
time line_count < $data_file
echo "running jdk version"
time java line_count < $data_file
--Hashgen.java--
import java.io.*;
public class Hashgen {
 public static void main(String args[]) throws Exception {
 String usage="Hashgen <fillchar> <0|1> <line length> <num uniq> <num lines>";
 if (args.length<4){
 System.err.println(usage);
 System.exit(1);
 }
 char fill_char=args[0].charAt(0);
 int post=Integer.parseInt(args[1]);
 int line_length= Integer.parseInt(args[2]);
 int num_unique=Integer.parseInt(args[3]);
 int num_lines=Integer.parseInt(args[4]);
 boolean postfix= (post==1);
 int i=0;
 // build pattern string
 char ca[]= new char[line_length];
 for (i=0; i<line_length; i++){
 ca[i]= fill_char;
 }
 String pattern= new String(ca);
 if (postfix){
 for (i=0; i<num_lines; i++){
 System.out.println(pattern+(i%num_unique));
 }
 }
 else {
 for (i=0; i<num_lines; i++){
 System.out.println((i%num_unique)+pattern);
 }
 }
 } 
}
--line_count.java--
import java.io.*;
public class line_count {
 public static void main(String args[]) throws Exception {
 BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
 String line= in.readLine();
 int num_lines=0;
 while (line!=null){
 num_lines++;
 line= in.readLine();
 }
 System.out.println(num_lines);
 }
}
__________________________________
Do you Yahoo!?
Free Pop-Up Blocker - Get it now
http://companion.yahoo.com/


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /