Andrey,

<SNIP>


The code for VMStart's init() and shutdown() is equally run regardless
of whether drlvm is started with it's own or classlib launcher. The
difference is only in running the user app main() method. Classlib
launcher calls it directly, through JNI, while the drlvm's launcher
wraps it into the run() method and always runs in a separate thread.
I suspect there could be some difference in the classloader's used for
the user app code, perhaps the drlvm classloading experts could give
some more details.


Currently the application class is loaded by system class loader (class
loader returned by ClassLoader.getSystemClassLoader() call). Please, see
MainThread.run() in
vm/vmcore/src/kernel_classes/javasrc/java/lang/VMStart.java. The main
question here is what class loader classlib launcher will use to find main
application class. If it calls to jni->FindClass interface function then no
Java frame exists ontop of this call and, again, system class loader will be
user to load main application class. So, no difference actually exists.

<MORE SNIP>


Yes, this sounds reasonable. Then, what should be the expected
behavior for DestroyVM in case it finds pending exception, should it
silently ignore it, or report a warning or what? JNI spec doesn't seem
to specify these details.


AFAIK, JNI specification explicitly declares that no JNI function other than
ExceptionOccured, ExceptionCheck, and ExceptionDescribe are not guaranteed
to work in exception state. So, it is reasonable that the user of JNI
functions (classlib launcher in our case) clears exception (or process it
otherwise) before calling to any JNI function.

With the best regards,
   Pavel Pervov.
Intel Middleware Products Division.

Reply via email to