2

OpenCVのJavaポートのメモリ管理について質問があります。

JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__III
          (JNIEnv* env, jclass, jint rows, jint cols, jint type)
        {
            try {
                LOGD("Mat::n_1Mat__III()");

                Mat* _retval_ = new Mat( rows, cols, type );

                return (jlong) _retval_;
            } catch(cv::Exception e) {
                LOGD("Mat::n_1Mat__III() catched cv::Exception: %s", e.what());
                jclass je = env->FindClass("org/opencv/core/CvException");
                if(!je) je = env->FindClass("java/lang/Exception");
                env->ThrowNew(je, e.what());
                return 0;
            } catch (...) {
                LOGD("Mat::n_1Mat__III() catched unknown exception (...)");
                jclass je = env->FindClass("java/lang/Exception");
                env->ThrowNew(je, "Unknown exception in JNI code {Mat::n_1Mat__III()}");
                return 0;
            }
        }

このコード ブロックは、「..\OpenCV-2.4.5\modules\java\generator\src\cpp\Mat.cpp」から取得されます。私の質問は、次の部分についてです。

Mat* _retval_ = new Mat( rows, cols, type );
return (jlong) _retval_;

キャストしてマットオブジェクトのアドレスを返しjlong、オブジェクトを削除しません。では、メモリ管理はどのように行われるのでしょうか? Javaはガベージコレクターを実行しますか? または、何らかの方法でメモリをクリアする C++ 側の他のコードはありますか?

4

2 に答える 2