Reputation: 10893
I have a C shared library that is used from a Java application via JNI. I need to store some expensive-to-calculate data which will be valid for the lifespan of a JavaVM
. I would like to store this in a static
variable in C, so that it gets calculated exactly once.
Of course, this will fail if it is possible for my library to be used from multiple JavaVM
s in the same process. My static values would only be valid in the first JavaVM
. If my library is being loaded from Java via System.loadLibrary
in a static
block on a class, is it ever possible for said library to be used across multiple JavaVMs without having to completely unload my C shared library?
Upvotes: 3
Views: 101
Reputation: 98505
Yes. Most popular JVM implementations, in particular, HotSpot JVM and its derivatives, allow only one Java Virtual Machine per process.
In fact, an implementation allowing multiple VMs in one process, will not be compliant with the JNI specification, as the documentation to JNI_CreateJavaVM and JNI_GetCreatedJavaVMs explicitly says that
Creation of multiple VMs in a single process is not supported.
Upvotes: 6