Как отслеживать утечку памяти в JNI с помощью Android Studio Profiler или других ⇐ Android
-
Anonymous
Как отслеживать утечку памяти в JNI с помощью Android Studio Profiler или других
Я хочу знать, как отслеживать утечки памяти в JNI с помощью Android Profiler. У меня есть приложение, использующее NDK, и в нем есть утечки памяти в JNI. Я проверил это в Profiler.
JNIEXPORT jfloat JNICALL FACE_ENGINE_METHOD(nativeExtractLiveFeature)(JNIEnv *env, экземпляр задания, jobject bmp, jint влево, jint вверху, jint вправо, jint внизу, ориентиры jfloatArrayX, ориентиры jfloatArrayY, функции jfloatArray) { резюме::Mat matBGR; ConvertBitmap2Mat (окр., bmp, matBGR); if( matBGR.empty() || matBGR.cols == 0 || matBGR.rows == 0) вернуть 0,0f; LOG_DEBUG("Размер кадра = (%d, %d)", matBGR.cols, matBGR.rows); LOG_DEBUG("Face Rect = (%d, %d, %d, %d)", слева, сверху, справа, снизу); cv::Rect rtFace; rtFace.x = max(0, слева); rtFace.y = max(0, верх); rtFace.width = min(matBGR.cols, справа) - rtFace.x; rtFace.height = min(matBGR.rows, дно) - rtFace.y; Live *pLive = Live::getInstance(); доверие с плавающей запятой = pLive->Detect(matBGR, rtFace); LOG_DEBUG("Face Live Conf = %f", уверенность); плавать posLMX[5]; плавать posLMY[5]; jfloat* tmpLandX = env->GetFloatArrayElements(landmarksX, NULL); jfloat* tmpLandY = env->GetFloatArrayElements(landmarksY, NULL); for(int я = 0; я GetFeatures(matBGR, posLMX, posLMY, feat); LOG_DEBUG("Извлечение функции завершено"); матBGR.выпуск(); env->SetFloatArrayRegion(features, 0, 128, (jfloat*)feat); env->ReleaseFloatArrayElements(landmarksX, tmpLandX, 0); env->ReleaseFloatArrayElements(landmarksY, tmpLandY, 0); вернуть доверие; } Приложение неоднократно вызывает эту функцию JNI, что приводит к утечкам памяти. Мне нужно найти решение с помощью Android Profiler.
Я хочу знать, как отслеживать утечки памяти в JNI с помощью Android Profiler. У меня есть приложение, использующее NDK, и в нем есть утечки памяти в JNI. Я проверил это в Profiler.
JNIEXPORT jfloat JNICALL FACE_ENGINE_METHOD(nativeExtractLiveFeature)(JNIEnv *env, экземпляр задания, jobject bmp, jint влево, jint вверху, jint вправо, jint внизу, ориентиры jfloatArrayX, ориентиры jfloatArrayY, функции jfloatArray) { резюме::Mat matBGR; ConvertBitmap2Mat (окр., bmp, matBGR); if( matBGR.empty() || matBGR.cols == 0 || matBGR.rows == 0) вернуть 0,0f; LOG_DEBUG("Размер кадра = (%d, %d)", matBGR.cols, matBGR.rows); LOG_DEBUG("Face Rect = (%d, %d, %d, %d)", слева, сверху, справа, снизу); cv::Rect rtFace; rtFace.x = max(0, слева); rtFace.y = max(0, верх); rtFace.width = min(matBGR.cols, справа) - rtFace.x; rtFace.height = min(matBGR.rows, дно) - rtFace.y; Live *pLive = Live::getInstance(); доверие с плавающей запятой = pLive->Detect(matBGR, rtFace); LOG_DEBUG("Face Live Conf = %f", уверенность); плавать posLMX[5]; плавать posLMY[5]; jfloat* tmpLandX = env->GetFloatArrayElements(landmarksX, NULL); jfloat* tmpLandY = env->GetFloatArrayElements(landmarksY, NULL); for(int я = 0; я GetFeatures(matBGR, posLMX, posLMY, feat); LOG_DEBUG("Извлечение функции завершено"); матBGR.выпуск(); env->SetFloatArrayRegion(features, 0, 128, (jfloat*)feat); env->ReleaseFloatArrayElements(landmarksX, tmpLandX, 0); env->ReleaseFloatArrayElements(landmarksY, tmpLandY, 0); вернуть доверие; } Приложение неоднократно вызывает эту функцию JNI, что приводит к утечкам памяти. Мне нужно найти решение с помощью Android Profiler.
Мобильная версия