关于Android的内存释放的问题(实时大数据的JNI处理)
我用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传下来的)