java - 调用 DestroyJavaVM 后重新调用 JNI_CreateJavaVM 返回 -1

标签 java c++ linux jvm java-native-interface

我试图在调用 DestroyJavaVM 后调用 JNI_CreateJavaVM。

我按以下顺序调用它们:InitJVM -> ReleaseJVM -> InitJVM

第一次初始化时,JNI_CreateJavaVM 返回 0 并且工作正常。 销毁后第二次初始化时,JNI_CreateJavaVM 返回-1,不起作用。

会出现什么问题?

这是一个创建 JVM 的函数:

#elif __linux
HRESULT PWNJava::InitJVM(void) {

    if(m_bRunning) {
        Log("Error : JVM is already Running! (PWNJava::Init)");
        return PWN_FAIL;
    }

    const int kNumOptions = 3;
    JavaVMOption options[kNumOptions] = {
        { const_cast<char*> ("-Xmx128m"), NULL},
        { const_cast<char*> ("-verbose:gc"), NULL},
        { const_cast<char*> ("-Djava.class.path=../../Class"), NULL}
    };

    JavaVMInitArgs vm_args;
    vm_args.version = JNI_VERSION_1_6;
    vm_args.options = options;
    vm_args.nOptions = sizeof (options) / sizeof (JavaVMOption);
    assert(vm_args.nOptions == kNumOptions);

    int res = JNI_CreateJavaVM(&jvm, reinterpret_cast<void**> (&env), &vm_args);
    if (res != JNI_OK) {
        Log("Error : createJavaVM(&jvm, &env, &vm_args)");
        return PWN_FAIL;
    }

    m_bRunning = true;

    Log("Success : PWNJava::Init");

    return PWN_OK;
}

#endif

这是一个删除 JVM 的函数:

void PWNJava::ReleaseJVM(void) {

    if (jvm)
        jvm->DestroyJavaVM();

    jvm = NULL;
    delete jvm;

    env = NULL;
    delete env;

    m_bRunning = false;

    Log("Success : PWNJava::ReleaseJVM");

}

最佳答案

上次我查看JNI_DestroyJVM()时,它说"The JDK/JRE still does not support VM unloading, however."只是不要调用它,也不要重新初始化它。

关于java - 调用 DestroyJavaVM 后重新调用 JNI_CreateJavaVM 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486486/

相关文章:

linux - 将 puts 的输出同时发送到日志文件和标准输出?

linux - 从不同域访问多个网站

c++ - 错误 : No instance of constructor matches the argument list

c++ - Qt5 嘈杂的调试消息 "XI2 mouse release ... source MouseEventNotSynthesized"

c++ - - 9'223' 37 2'036' 85 4'775' 808LL 未签名

linux - Bash 变量始终为空

java - 比较字符串并返回 boolean 值

java - 将 Getters/Setter 添加到一个基类

java - Spring-MVC RequestMapping URITemplate 中的可选路径变量

java - hibernate 更新 : Why hibernate delete object before insert them after