解决方案 »

  1.   

    会内存泄漏啊,所以提示ReferenceTable overflow (max=1024)
      

  2.   

    返回后在Java层调用jni层的一个函数,专门用来释放一些资源就好了啊。
      

  3.   

    用JNI中引用的方式处理,在JNI C函数中创建一个JString返回给JAVA层,同时把这个对象作为引用放到外面。
    然后再写一个C函数,进行释放操作。类似这样的.jchar *cc = 0;
    jstring getString(){
      cc = "hello,guy";
      return newStringUtf(cc);
    }void release(){
      cc = 0;
    }
      

  4.   

    也就是说,
    也就是说,如果没有这个释放函数,就会造成内存引用表溢出,但JAVA层的GC不会去自动删除这个内存吗?
      

  5.   

    JAVA GC也没那么快去释放,
    况且你用native, jni层的数据应该放在 jvm中的native method stack中。
      

  6.   

    jclass ref= (env)->FindClass("java/lang/String");
    env->DeleteLocalRef(ref); 
    这个在JNI层删除对象引用。
      

  7.   

    返回到java中的对象,会被jvm管理,所以不用担心它不会被回收,在jni中,只有在C端结束的对象需要被free掉,即使在java中生成,但是在C端使用并未返回的对象,会出现内存泄露,因此,需要free,通过return 返回到java中,并且是C中生成的对象,并不需要手动free。
      

  8.   


    JVM的清理是实现的吗,会不会过一段时间才去清理,若没有清理,会不会造成JNI成的
    ReferenceTable overflow (max=1024)溢出。
      

  9.   

    jvm的清理,就是自动垃圾回收,和java对象的清理是一样的,至于什么时候清理,由jvm自己去负责,你管理不了,但是不会造成溢出,除非对象一直被引用。如果你希望立即回收,可以自己写一个native的free 吧对象传入然后free掉。
    但并不推荐这么做。