I have been browsing the JDK1.2b4 docs, and noticed some changes in JNI
which I didn't see before.  Here is the one I'm especially bothered by,
quoted from the Library and Version Management section of the JNI
Enhancements in JDK 1.2 document:

"The same JNI native library cannot be loaded into more than one class
loader.  Doing so causes UnsatisfiedLinkError to be thrown."

Guys, what this means is: Sun has realized their mistake with native libs
and the caching issue.  They are not fixing it, they are just living with
it.  They are not going to bother providing support for multiple
ClassLoaders in native code.  By extension, we can probably infer that they
will never ever support native libs in multiple VMs.  This change alone has
nullified much of our discussion of caching references.  I suspect that soon
enough the invocation interface's docs will change to reflect that multiple
VMs are not supported; they really cannot be, given the optimizations they
suggest people do.

Now, as for what this means for Japhar and Classpath: we can still aim for a
version that does multiple VMs per process, but I think we must aim for it
as a *special version* of Japhar, some compile switch that turns on multiple
VM support and the extra code it entails for caching things.  The general
Japhar will have to handle everyone's JNI code, and with Sun's suggested
caching optimization I don't believe multi-VM Japhar would be able to handle
it.

--John Keiser

Reply via email to