Java_com_didi_hummer_core_engine_napi_jni_JSEngine_callFunction 内存泄漏
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- android, cpp, java, javascript
- Área
- mobile
Línea de trabajo
Comienza en Java_com_didi_hummer_core_engine_napi_jni_JSEngine_callFunction y sigue el NAPI handle scope, el resultado de napi_call_function y la conversión de JSUtils::JsValueToJavaObject. Reproduce el caso de setInterval repetido y verifica que las llamadas repetidas ya no dejen retenidas referencias adicionales a JSValue o Promise.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
案例:
this.timer = setInterval(async () => {
console.log('每隔 1s 执行一次');
}, 1000);
每次执行JSValue都会增加一个。
extern "C"
JNIEXPORT jobject JNICALL
Java_com_didi_hummer_core_engine_napi_jni_JSEngine_callFunction(JNIEnv *env, jclass clazz, jlong js_context, jlong thisObj, jlong funcObj, jobjectArray params) {
auto globalEnv = JSUtils::toJsContext(js_context);
NAPIHandleScope handleScope;
napi_open_handle_scope(globalEnv, &handleScope);
NAPIValue jsThisObj = JSUtils::toJsValue(globalEnv, thisObj);
NAPIValue jsFuncObj = JSUtils::toJsValue(globalEnv, funcObj);
auto paramsCount = static_cast<int>(env->GetArrayLength(params));
if (jsFuncObj == nullptr) {
return nullptr;
}
auto values = new NAPIValue[paramsCount];
for (int i = 0; i < paramsCount; i++) {
jobject obj = env->GetObjectArrayElement(params, i);
values[i] = JSUtils::JavaObjectToJsValue(globalEnv, obj);
env->DeleteLocalRef(obj);
}
if (jsThisObj == nullptr) {
jsThisObj = JSUtils::createJsUndefined(globalEnv);
}
NAPIValue result;
auto status = napi_call_function(globalEnv, jsThisObj, jsFuncObj, paramsCount, values, &result);
if (status == NAPIExceptionPendingException) {
reportExceptionIfNeed(globalEnv);
napi_close_handle_scope(globalEnv, handleScope);
return nullptr;
}
delete[] values;
jobject r = JSUtils::JsValueToJavaObject(globalEnv, result, true);
napi_close_handle_scope(globalEnv, handleScope);
return r;
}
原因是每次调用 NAPIValue result; 都会返回一个Promise,导致JSUtils::JsValueToJavaObject(globalEnv, result, true)的使用做了强制+1,从而导致内存不释放
- Lenguaje dominante
- Objective-C
- Estrellas
- 1.4k
- Forks
- 186
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de didi/Hummer
-
支持svg图吗?Abiertoenhancement Needs: Triage 🔍
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
T i t li leAbiertobug Needs: Triage 🔍
Dificultad 5/5 Más de una semana Aptitud para principiantes 1/100
-
升级yoga3(yoga2)后,scroller 在不设置size 时,两端大小表现不一致Quizá libre de nuevo @yFeii la tomó hace 839 días y no hay ningún pull request abierto. Abiertobug Needs: Triage 🔍
-
bug Needs: Triage 🔍
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
-
hummer会导致全app的网页无法打开Abiertobug Needs: Triage 🔍
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Todos los issues de didi/Hummer
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
RevenueCat/purchases-ios#8171 ·
Los mantenedores suelen responder en 1 día
-
bug: remote desktop never produces frames — capture helper hangs in SkyLight initDisplayState() on macOS 13 (dual-GPU)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
makecindy/cindy#8256 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
contributor: external needs review
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
expo/expo#52686 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
callstack/agent-device#4112 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
openid/AppAuth-iOS#989 ·