小编Bob*_*der的帖子

Java JNI在c ++进程中泄漏

我是Java的初学者.我的问题是:我从c ++调用Java类的方法.为此,我正在使用JNI.Everythings工作正常,但我在c ++程序的过程中有一些内存泄漏......

所以..我做了一个简单的例子..

1)我创建了一个java机器(jint res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);)

2)然后我在java类上使用指针(jclass cls = env-> FindClass("test_jni"));

3)之后我通过调用构造函数创建一个java类对象对象(testJavaObject = env-> NewObject(cls,testConstruct);)

此时此刻在c ++程序的过程中分配了10 MB的内存

4)接下来我删除类,对象和Java机器..

在这个时刻,10 MB的内存不是免费的.................所以下面我有几行代码

c ++程序

void main()
{
    {
        //Env
        JNIEnv *env;
        // java virtual machine
        JavaVM *jvm;
        JavaVMOption* options = new JavaVMOption[1];
        //class paths
        options[0].optionString = "-Djava.class.path=C:/Sun/SDK/jdk/lib;D:/jms_test/java_jni_leak;"; 
        // other options
        JavaVMInitArgs vm_args;
        vm_args.version = JNI_VERSION_1_6;
        vm_args.options = options;
        vm_args.nOptions = 1;
        vm_args.ignoreUnrecognized = false;
        // alloc part of memory (for test) before CreateJavaVM
        char* testMem0 = new char[1000];
        for(int …
Run Code Online (Sandbox Code Playgroud)

c c++ java memory java-native-interface

5
推荐指数
1
解决办法
2182
查看次数

标签 统计

c ×1

c++ ×1

java ×1

java-native-interface ×1

memory ×1