From 2003d2d952438d41059c7eb8a5c02d8a806a6590 Mon Sep 17 00:00:00 2001 From: Kai Yang Date: Fri, 6 Dec 2019 18:53:24 +0800 Subject: [PATCH] explicit delete local reference in `task_execution_callback` for garbage collection (#6379) --- src/ray/core_worker/lib/java/jni_utils.h | 12 +++++++++--- .../lib/java/org_ray_runtime_RayNativeRuntime.cc | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ray/core_worker/lib/java/jni_utils.h b/src/ray/core_worker/lib/java/jni_utils.h index e5de78931..75e29a785 100644 --- a/src/ray/core_worker/lib/java/jni_utils.h +++ b/src/ray/core_worker/lib/java/jni_utils.h @@ -156,6 +156,7 @@ class JavaByteArrayBuffer : public ray::Buffer { ~JavaByteArrayBuffer() { env_->ReleaseByteArrayElements(java_byte_array_, native_bytes_, JNI_ABORT); + env_->DeleteLocalRef(java_byte_array_); } private: @@ -205,8 +206,9 @@ inline void JavaListToNativeVector( int size = env->CallIntMethod(java_list, java_list_size); native_vector->clear(); for (int i = 0; i < size; i++) { - native_vector->emplace_back( - element_converter(env, env->CallObjectMethod(java_list, java_list_get, (jint)i))); + auto element = env->CallObjectMethod(java_list, java_list_get, (jint)i); + native_vector->emplace_back(element_converter(env, element)); + env->DeleteLocalRef(element); } } @@ -228,7 +230,9 @@ inline jobject NativeVectorToJavaList( env->NewObject(java_array_list_class, java_array_list_init_with_capacity, (jint)native_vector.size()); for (const auto &item : native_vector) { - env->CallVoidMethod(java_list, java_list_add, element_converter(env, item)); + auto element = element_converter(env, item); + env->CallVoidMethod(java_list, java_list_add, element); + env->DeleteLocalRef(element); } return java_list; } @@ -304,6 +308,8 @@ inline jobject NativeRayObjectToJavaNativeRayObject( auto java_metadata = NativeBufferToJavaByteArray(env, rayObject->GetMetadata()); auto java_obj = env->NewObject(java_native_ray_object_class, java_native_ray_object_init, java_data, java_metadata); + env->DeleteLocalRef(java_metadata); + env->DeleteLocalRef(java_data); return java_obj; } diff --git a/src/ray/core_worker/lib/java/org_ray_runtime_RayNativeRuntime.cc b/src/ray/core_worker/lib/java/org_ray_runtime_RayNativeRuntime.cc index 40ee3351d..52b0653f7 100644 --- a/src/ray/core_worker/lib/java/org_ray_runtime_RayNativeRuntime.cc +++ b/src/ray/core_worker/lib/java/org_ray_runtime_RayNativeRuntime.cc @@ -64,6 +64,10 @@ JNIEXPORT jlong JNICALL Java_org_ray_runtime_RayNativeRuntime_nativeInitCoreWork for (auto &obj : return_objects) { results->push_back(obj); } + + env->DeleteLocalRef(java_return_objects); + env->DeleteLocalRef(args_array_list); + env->DeleteLocalRef(ray_function_array_list); return ray::Status::OK(); };