This is the mail archive of the java-discuss@sources.redhat.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Why interpret dynamically loaded classes?


Hi,

I note that both GCJ and TowerJ use a bytecode interpreter to handle dynamic
class loading. But why not just compile the dynamically loaded class to a
native shared object at *runtime*, then link at runtime, too?

ie. implement this native ClassLoader (in pseudo-c):

  Class ClassLoader::defineClass(String name, byte [] b, int off, int len ) 
  {
    filename = "lib" + mangle(name) + ".so";
    compile_to_shared_object(filename, b);
    void * ptr = dlopen("mypackage_myclass");
    return new Class(ptr);
  }

You'd just need to deploy the bytecode to native compiler with the
executable rather than the bytecode interpreter.

This way, you get the benefit of before-time compilation for dynamically
loaded classes too.  Of course, you'd add an 
  if (already_compiled(name)) {...}
to the defineClass method for efficiency.


Jack.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]