相关疑难解决方法(0)

使用JNI从C调用Java代码时内存泄漏

我有一个C程序,使用JNI在Java商店中存储一些对象.(在有人问之前,使用java商店是一个需求,我必须在C中编写一个能够从该商店添加和检索对象的客户端).

我制作了程序并尝试添加100000大小为1KB的对象.但是在添加了50000个对象后,我收到了"内存不足"的消息(请注意,每当我无法使用NewStringUTF和NewByteArray函数分配新的字符串或字节数组时,我就会打印这些"内存不足"消息).那时我的应用程序只使用80MB的内存.我不知道为什么这些方法返回NULL.有什么我想念的东西.

此外,即使我发布为java创建的字节数组和字符串,内存也在不断增加.

这是源代码.

    void create_jvm(void)
{
    JavaVMInitArgs vm_args;     
    JavaVMOption vm_options;

    vm_options.optionString = "-Djava.class.path=c:\\Store";
    vm_args.version = JNI_VERSION_1_4;
    vm_args.nOptions = 1;
    vm_args.options = &vm_options;
    vm_args.ignoreUnrecognized = 0;

    JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

    if(env != null)
    {
        j_store = (*env)->FindClass(env, "com/store");
        if(j_store == null)
        {
            printf("unable to find class. class name: JStore");
        }       
    }   
}

void add(char* key, char* value, int length)
{
    jstring j_key = (*env)->NewStringUTF(env, key);
    jbyteArray j_value = (*env)->NewByteArray(env, length);

    (*env)->SetByteArrayRegion(env, j_value, 0, length, (jbyte *)value);
    ret = (*env)->CallStaticBooleanMethod(env, j_store, method_id, …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface memory-leaks

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

java ×1

java-native-interface ×1

memory-leaks ×1