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

标签 java c jvm java-native-interface

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

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

最佳答案

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

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

Creation of multiple VMs in a single process is not supported.

关于java - 我是否保证每个使用 JNI 的进程只有一个 JavaVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66712163/

相关文章:

java - 用于删除价格输入的美元符号和尾随零的正则表达式

java - 将列表的字符串列表转换为整数列表

java - RxJava zip 对 parent 双方的每一次更改都起作用

c - 将int存储在C中的char数组中

java - Spring批量返回自定义进程退出码

java - JVM堆和Tomcat堆的关系

java - 在Java中,你能链接两个类之间的垃圾收集吗?

c - pthread_cleanup_push 导致语法错误

C密码出错

java - 执行时间计算的准确度如何?