Curious Kaffe vs. jdk speed test results under Linux

Maxim Kizub max at
Sat Jan 3 19:20:53 PST 1998

>Maxim Kizub wrote:
>| BTW, can someone explaine me how kaffe produces code for
>| fields access and method calls for not loaded classes? Trying to
>| do this by looking at kaffe's code is as easy as for egcs code ;-)
>The only entity that can access a field is a method in the class or a
>That requires that the class be loaded.  No problem there.

I'm down. Killed in one shot... (how to translate to english this russian
expression ? ;-)).

What about this code:

class A {
    public int i;

class B {
    int foo() {
        if (...) {
            A a = new A();
            return a.i;
            return 0;

How does kaffe compiles method when class A is not loaded?
Until expression in the 'if' statement is true - class A is not allowed
to be loaded ?!

>As for calling methods in unloaded classes (presumably constructors or
>static methods), kaffe uses "trampolines":
>- A class must be loaded before any of its constructors or methods can be
>  called, since Java must perform a type check.
>- However, the JIT need not be run right away.  Instead, in the method
>  table for the class, all of the method pointers are initialized to point
>  to a default routine.
>- When a program calls a method that hasn't been JITted yet, the default
>  routine is invoked.  It figures out what method was requested, JITs it,
>  and replaces the entry in the method table with a pointer to the new
>  It then jumps to the new code.
>- The next time the method is called, its code is executed directly.

Ok, I see how it works for methods. What about fields?

>| >> I'd rather not delve into the bowels of ecgs - trying to figure out
>| something
>| >> by looking at that code is not easy.
>Well, kaffevm is only 33384 lines of code and gcc is only 305068, so kaffe
>is a little easier to understand. ;-)

I mean - the code of java frontend is not the whole gcc ;-)

  Maxim Kizub

More information about the kaffe mailing list