JNI层的newstringutf内存问题。。

星爷是我哥 2013-10-14 05:38:20
在JNI层用newstringutf()函数,创建了一个jstring返回给了JAVA层,在JNI层没有执行deletelocalref函数。。

那会不会造成内存的问题。。

目前出现ReferenceTable overflow (max=1024)
的问题。。
...全文
1454 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc-c 2013-12-16
  • 打赏
  • 举报
回复
楼主有没有合适的解决办法呢?
树成 2013-10-24
  • 打赏
  • 举报
回复
jvm的清理,就是自动垃圾回收,和java对象的清理是一样的,至于什么时候清理,由jvm自己去负责,你管理不了,但是不会造成溢出,除非对象一直被引用。 如果你希望立即回收,可以自己写一个native的free 吧对象传入然后free掉。 但并不推荐这么做。
树成 2013-10-15
  • 打赏
  • 举报
回复
返回到java中的对象,会被jvm管理,所以不用担心它不会被回收,在jni中,只有在C端结束的对象需要被free掉,即使在java中生成,但是在C端使用并未返回的对象,会出现内存泄露,因此,需要free,通过return 返回到java中,并且是C中生成的对象,并不需要手动free。
Birds2018 2013-10-15
  • 打赏
  • 举报
回复
jclass ref= (env)->FindClass("java/lang/String"); env->DeleteLocalRef(ref); 这个在JNI层删除对象引用。
Birds2018 2013-10-15
  • 打赏
  • 举报
回复
JAVA GC也没那么快去释放, 况且你用native, jni层的数据应该放在 jvm中的native method stack中。
星爷是我哥 2013-10-15
  • 打赏
  • 举报
回复
也就是说,
引用 4 楼 birdsaction 的回复:
用JNI中引用的方式处理,在JNI C函数中创建一个JString返回给JAVA层,同时把这个对象作为引用放到外面。 然后再写一个C函数,进行释放操作。 类似这样的. jchar *cc = 0; jstring getString(){ cc = "hello,guy"; return newStringUtf(cc); } void release(){ cc = 0; }
也就是说,如果没有这个释放函数,就会造成内存引用表溢出,但JAVA层的GC不会去自动删除这个内存吗?
Birds2018 2013-10-15
  • 打赏
  • 举报
回复
用JNI中引用的方式处理,在JNI C函数中创建一个JString返回给JAVA层,同时把这个对象作为引用放到外面。 然后再写一个C函数,进行释放操作。 类似这样的. jchar *cc = 0; jstring getString(){ cc = "hello,guy"; return newStringUtf(cc); } void release(){ cc = 0; }
tantahe 2013-10-15
  • 打赏
  • 举报
回复
返回后在Java层调用jni层的一个函数,专门用来释放一些资源就好了啊。
星爷是我哥 2013-10-15
  • 打赏
  • 举报
回复
哪怎么返回JString呢。。
星爷是我哥 2013-10-15
  • 打赏
  • 举报
回复
引用 8 楼 spiniper 的回复:
返回到java中的对象,会被jvm管理,所以不用担心它不会被回收,在jni中,只有在C端结束的对象需要被free掉,即使在java中生成,但是在C端使用并未返回的对象,会出现内存泄露,因此,需要free,通过return 返回到java中,并且是C中生成的对象,并不需要手动free。
JVM的清理是实现的吗,会不会过一段时间才去清理,若没有清理,会不会造成JNI成的 ReferenceTable overflow (max=1024)溢出。
tantahe 2013-10-14
  • 打赏
  • 举报
回复
会内存泄漏啊,所以提示ReferenceTable overflow (max=1024)

80,476

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧