Jvm type represents a running Java Virtual Machine (JVM). It is mostly used to
execute JVM operations, but it also has some methods for interacting with the JVM that you may find useful. The way you get access to a
Jvm instance depends on the language of the primary application:
- If your main process is Rust, then use
Jvm::withto start the global JVM instance.
- If your main process is Java, then when your Rust code is invoked via JNI, you will be given a
As long as a thread has access to a
Jvm, either by invoking
Jvm::with or by getting called via JNI, you cannot get access to another one. Invoking
Jvm::with on a thread that already has access to a Jvm is an error. This is required to ensure safety, because it allows us to be sure that mutably borrowing a
Jvm instance blocks the thread from performing other
Jvm operations until that borrow is complete. Sequential invocations of
Jvm::with are allowed and will all be attached to that same underlying JVM instance.
Multiple threads can invoke
Jvm::with, but only one underlying JVM can ever be active at a time. If multiple threads invoke
Jvm::with, one of them will succeed in starting the JVM, and the others will be attached to that same underlying JVM instance as additional active threads.
When you start the JVM from your Rust code, you can set various options by using the jvm builder: