关于Android的内存释放的问题(实时大数据的JNI处理)

zengting zengting 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用java来获取android的摄像头的数据,然后通过JNI来把这些数据传到下面的C进行压缩,但发现捕捉摄像头的数据再传输到JNI后,几秒钟后会出现内存溢出

void Java_com_video_getYUVData(JNIEnv *env,jobject obj,jbyteArray out)
{

buffer=(jbyte*)(*env)->GetByteArrayElements(env,out, 0);//如果这句话注释后,内存就正常

}

奇怪的是,如果加入 buffer=(jbyte*)(*env)->GetByteArrayElements(env,out, 0); 程序就会慢慢内存溢出错误。

02-11 20:53:38.774: I/dalvikvm-heap(7090): Clamp target GC heap from 49.515MB to 48.000MB
02-11 20:53:38.774: D/dalvikvm(7090): GC_FOR_ALLOC freed 31K, 2% free 48581K/49095K, paused 93ms
02-11 20:53:38.774: I/dalvikvm-heap(7090): Forcing collection of SoftReferences for 115216-byte allocation
02-11 20:53:38.994: I/dalvikvm-heap(7090): Clamp target GC heap from 49.513MB to 48.000MB
02-11 20:53:38.994: D/dalvikvm(7090): GC_BEFORE_OOM freed 1K, 2% free 48579K/49095K, paused 224ms
02-11 20:53:39.004: E/dalvikvm-heap(7090): Out of memory on a 115216-byte allocation.
02-11 20:53:39.004: I/dalvikvm(7090): "Binder Thread #2" prio=5 tid=10 RUNNABLE
02-11 20:53:39.004: I/dalvikvm(7090): | group="main" sCount=0 dsCount=0 obj=0x41059c18 self=0x1b70d0
02-11 20:53:39.004: I/dalvikvm(7090): | sysTid=7102 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=1401160
02-11 20:53:39.004: I/dalvikvm(7090): | schedstat=( 820000000 960000000 1320 ) utm=64 stm=18 core=0
02-11 20:53:39.004: I/dalvikvm(7090): at dalvik.system.NativeStart.run(Native Method)
02-11 20:53:39.014: E/Camera-JNI(7090): Couldn't allocate byte array for JPEG data


不加的话,一切正常,真不知道怎么处理(jbyteArray out是上层的java传下来的)
...全文
评论 2
收藏 已收藏
分享
返回顶部
zengting
Android 80,489 成员 91,375 内容