如何解决我是否可以保证每个使用 JNI 的进程只有一个 JavaVM?
我有一个通过 JNI 从 Java 应用程序使用的 C 共享库。我需要存储一些计算成本高的数据,这些数据在 JavaVM
的生命周期内都是有效的。我想将它存储在 C 中的 static
变量中,以便它只计算一次。
当然,如果我的库可以在同一个进程中被多个 JavaVM
使用,那么这将失败。我的静态值仅在第一个 JavaVM
中有效。如果我的库是通过类的 System.loadLibrary
块中的 static
从 Java 加载的,是否有可能在多个 JavaVM 之间使用所述库而不必完全卸载我的 C 共享库?
解决方法
是的。大多数流行的 JVM 实现,特别是 HotSpot JVM 及其衍生产品,每个进程只允许一个 Java 虚拟机。
事实上,在一个进程中允许多个 VM 的实现将不符合 JNI 规范,因为 JNI_CreateJavaVM 和 JNI_GetCreatedJavaVMs 的文档明确指出
不支持在单个进程中创建多个 VM。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。