JNI层的newstringutf内存问题。。 jnijava 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 会内存泄漏啊,所以提示ReferenceTable overflow (max=1024) 返回后在Java层调用jni层的一个函数,专门用来释放一些资源就好了啊。 用JNI中引用的方式处理,在JNI C函数中创建一个JString返回给JAVA层,同时把这个对象作为引用放到外面。然后再写一个C函数,进行释放操作。类似这样的.jchar *cc = 0;jstring getString(){ cc = "hello,guy"; return newStringUtf(cc);}void release(){ cc = 0;} 也就是说,也就是说,如果没有这个释放函数,就会造成内存引用表溢出,但JAVA层的GC不会去自动删除这个内存吗? JAVA GC也没那么快去释放,况且你用native, jni层的数据应该放在 jvm中的native method stack中。 jclass ref= (env)->FindClass("java/lang/String");env->DeleteLocalRef(ref); 这个在JNI层删除对象引用。 返回到java中的对象,会被jvm管理,所以不用担心它不会被回收,在jni中,只有在C端结束的对象需要被free掉,即使在java中生成,但是在C端使用并未返回的对象,会出现内存泄露,因此,需要free,通过return 返回到java中,并且是C中生成的对象,并不需要手动free。 JVM的清理是实现的吗,会不会过一段时间才去清理,若没有清理,会不会造成JNI成的ReferenceTable overflow (max=1024)溢出。 jvm的清理,就是自动垃圾回收,和java对象的清理是一样的,至于什么时候清理,由jvm自己去负责,你管理不了,但是不会造成溢出,除非对象一直被引用。如果你希望立即回收,可以自己写一个native的free 吧对象传入然后free掉。但并不推荐这么做。 java模拟c#中的委托时的反射调用方法问题 如何通过动态设定ImageView控件的位置而不通过XML文件 java新鸟求解专家建议 定时发送消息广播没有收到消息,什么情况- - 安装APK 无系统的安装提示 获取scrollview包裹的textview 某一页面的内容 怎么继续提高自己的android水平 Cursor 关于手机NFC功能的应用 新人求助 安卓的广播的使用 有点经验不要吝啬啊 一个与robotium有关的问题,求大神帮助!
然后再写一个C函数,进行释放操作。类似这样的.jchar *cc = 0;
jstring getString(){
cc = "hello,guy";
return newStringUtf(cc);
}void release(){
cc = 0;
}
也就是说,如果没有这个释放函数,就会造成内存引用表溢出,但JAVA层的GC不会去自动删除这个内存吗?
况且你用native, jni层的数据应该放在 jvm中的native method stack中。
env->DeleteLocalRef(ref);
这个在JNI层删除对象引用。
JVM的清理是实现的吗,会不会过一段时间才去清理,若没有清理,会不会造成JNI成的
ReferenceTable overflow (max=1024)溢出。
但并不推荐这么做。