我有下面的函数“initializeAlgo”,它用于使用特定的 Algo jar 文件初始化 Java VM,后来我使用创建的 java 环境来调用 Jar 中的其他 fns。
JavaVM *jvm;
JNIEnv *env;
void initializeAlgo(const std::string& algoSourceJar) {
JavaVMInitArgs vm_args;
JavaVMOption* options = new JavaVMOption[1];
std::string classPath = "-Djava.class.path=" + algoSourceJar;
options[0].optionString = new char[classPath.length()]();
strcpy(options[0].optionString, classPath.c_str());
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = false;
//================= load and initialize Java VM and JNI interface============
initStatus = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
}
假设如果我必须支持满足某个接口的多个算法源的动态加载。即加载 Algo_1 并进行一些处理并记录结果,并且在不关闭应用程序的情况下我想加载 Algo_2 并执行相同的处理并记录结果。它们都具有相同的命名空间和 fns。是否建议在应用程序的同一实例中执行此操作?