Not sure if everyone on this list is also on the -commits list, and i wanted everyone to see this. :) Chris Christoph Toshok wrote: > toshok 1999/07/30 23:14:39 PDT > > Modified files: > java/japhar/include ClazzFile.h objects.h > java/japhar/lib/libjni/src jnirefl.c > java/japhar/lib/libjvmdi/src jvmdicls.c > java/japhar/lib/libnative/java.io objstrm.c > java/japhar/lib/libnative/java.lang class.c > java/japhar/lib/libruntime array-class.c clparse.c field.c > interpfunc.c interploop.c method.c > nativeglue.c objects.c > primitive-class.c > Log: > move to a better virtual method / interface method layout and lookup strategy. > > virtual methods are kept in a traditional vtable (in the ClazzFile), and > interface methods are kept in a similar per-interface,per-class vtable. > > Virtual method lookup (once the method is resolved) is now constant time > (requiring two lookups -- once for the method to call, and once for the > callee's implementation of that method.) > > Interface method lookups are still linear (but linear wrt to the number of > interfaces a class implements, not wrt the number of methods the class > contains.) There is room for improvement here. For example, EF uses a matrix > compression technique to make interface lookup constant time. > > There is still (obviously, from the below timings) more room for optimization, > but this was extremely low hanging fruit. > > Time for javac compiling ArrayTest.java from the japhar testsuite: > > jdk1.1.8 : [done in 2441 ms] > japhar (before): [done in 7801 ms] > japhar (after) : [done in 5585 ms] > > :) > > Revision Changes Path > 1.43 +33 -24 hungry/java/japhar/include/ClazzFile.h > 1.32 +0 -6 hungry/java/japhar/include/objects.h > 1.12 +2 -2 hungry/java/japhar/lib/libjni/src/jnirefl.c > 1.8 +2 -2 hungry/java/japhar/lib/libjvmdi/src/jvmdicls.c > 1.23 +3 -3 hungry/java/japhar/lib/libnative/java.io/objstrm.c > 1.55 +22 -21 hungry/java/japhar/lib/libnative/java.lang/class.c > 1.29 +10 -9 hungry/java/japhar/lib/libruntime/array-class.c > 1.87 +339 -232 hungry/java/japhar/lib/libruntime/clparse.c > 1.4 +1 -1 hungry/java/japhar/lib/libruntime/field.c > 1.105 +42 -37 hungry/java/japhar/lib/libruntime/interpfunc.c > 1.101 +17 -19 hungry/java/japhar/lib/libruntime/interploop.c > 1.10 +31 -13 hungry/java/japhar/lib/libruntime/method.c > 1.74 +6 -13 hungry/java/japhar/lib/libruntime/nativeglue.c > 1.71 +2 -32 hungry/java/japhar/lib/libruntime/objects.c > 1.13 +13 -0 hungry/java/japhar/lib/libruntime/primitive-class.c
