Very slow compiler?

Bryce McKinlay bryce@albatross.co.nz
Mon Sep 25 01:59:00 GMT 2000


My libgcj build has suddenly become extremely slow. Each class file is currently taking around 5-10 seconds to compile on my 450mhz machine, far longer than it should.

The slowdown is dependent on which directory the compiler is run from:

[bryce@hokkaido libgcj]$ pwd
/home/bryce/cvs/libgcj
[bryce@hokkaido libgcj]$ time gcj -C libjava/java/io/ObjectStreamConstants.java
0.03user 0.00system 0:00.07elapsed 42%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (475major+302minor)pagefaults 0swaps

fine.

[bryce@hokkaido libgcj]$ cd libjava/
[bryce@hokkaido libjava]$ time gcj -C java/io/ObjectStreamConstants.java
2.86user 0.57system 0:10.72elapsed 31%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (482major+3100minor)pagefaults 0swaps

bad.

Further investigation running jc1 without "-quiet" shows that it is looking at hundreds of class files that it shouldn't:

[bryce@hokkaido libjava]$ /usr/local/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.96/jc1
java/io/ObjectStreamConstants.java -v -dumpbase ObjectStreamConstants.java -g1 -
version -fsyntax-only -femit-class-files
jc1: Unrecognized option `-v'
GNU Java version 2.96 20000924 (experimental) (i686-pc-linux-gnu) compiled by GN
U C version 2.96 20000905 (experimental).
options passed:  -v -g1 -fsyntax-only -femit-class-files
options enabled:  -fpeephole -ffunction-cse -fkeep-static-consts
 -fsyntax-only -fpcc-struct-return -fsched-interblock -fsched-spec
 -fbranch-count-reg -fnew-exceptions -fcommon -fgnu-linker -fargument-alias
 -fident -fmath-errno -fbounds-check -m80387 -mhard-float -mno-soft-float
 -mieee-fp -mfp-ret-in-387
 interface java.io.ObjectStreamConstants class java.io.SerializablePermission cl
ass java.security.BasicPermission innerclass java.security.BasicPermission$1 int
erface java.io.Serializable class java.util.Hashtable innerclass java.util.Hasht
able$HashtableEntry innerclass java.util.Hashtable$HashtableEnumeration innercla
ss java.util.Hashtable$HashtableSet innerclass java.util.Hashtable$HashtableColl
ection innerclass java.util.Hashtable$HashtableIterator [etc etc etc..........]

When run in a different directory, it doesn't have this problem. Only the correct list of dependencies are loaded.

regards

  [ bryce ]




More information about the Java mailing list