我是否可以保证每个使用JNI的进程只有一个JavaVM?

我有一个通过 JNI 从 Java 应用程序使用的 C 共享库。我需要存储一些计算成本高昂的数据,这些数据在JavaVM. 我想将它存储static在 C中的一个变量中,以便它只计算一次。

当然,如果我的库可以JavaVM在同一进程中从多个s 中使用,这将失败。我的静态值仅在第一个JavaVM. 如果我的库是通过类上的System.loadLibrary一个static块从 Java 加载的,是否有可能在多个 JavaVM 之间使用所述库而不必完全卸载我的 C 共享库?

回答

是的。大多数流行的 JVM 实现,特别是 HotSpot JVM 及其衍生产品,每个进程只允许一个 Java 虚拟机。

事实上,在一个进程中允许多个 VM 的实现将不符合 JNI 规范,因为JNI_CreateJavaVM和JNI_GetCreatedJavaVMs的文档明确指出

不支持在单个进程中创建多个 VM。

  • But I have difficulties with the concept of writing insufficiencies of a particular implementation into the specification. Especially defining an API for querying “all Java VMs that have been created” and then writing into its documentation that there can only be one.

以上是我是否可以保证每个使用JNI的进程只有一个JavaVM?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>