我正在编写一个Android应用程序试试关闭垃圾收集器几次。
我的程序调用JNI C ++函数。在那里,计算一些数据(使用OpenCV提取特征)并打包到基本数组中。每次,如果GC在分配内存和写入数据之间运行,程序将失败。多数民众赞成,因为指向记忆的指针已经过时了。
以下是一些代码示例:
jfloatArray result = (env)->NewFloatArray(data_size);
if(result == NULL) return NULL;
//2.2 getting working copy
jboolean isCopy = false;
jfloat* dst;
dst = (jfloat*) env->GetPrimitiveArrayCritical(result, NULL);
//dst = env->GetFloatArrayElements(result, NULL);
if(dst == NULL) return (NULL);
//2.3 working
//Encoding - Description:
//First line: |Key Indicator|Count KeyPoints|Something else|
dst[0] = data.size();
int dst_ptr = 0;
for(int i = 1; i < data.size()-1; i++)
{
//Write data
}
//2.4 write data back
env->ReleasePrimitiveArrayCritical(result, dst, JNI_COMMIT);
//Release Copy
env->ReleasePrimitiveArrayCritical(result, dst, JNI_ABORT);
正如你所看到的,我使用了原始的关键,但有时候垃圾收集器也会运行。
我的问题是:
thx for all help