我可以在一個JNI函數中分配一個內存塊,並在另一個JNI函數中釋放一個內存塊嗎?本地代碼在jni調用之間分配的內存
恐怕jvm會從本地函數中捕獲malloc的調用,並在函數完成時釋放它;例如,此代碼正確的:
char * buffer;
JNIEXPORT jlong JNICALL Java_test_init(JNIEnv *env, jobject obj) {
buffer = malloc(1000);
return (jlong)buffer; //for check it
}
JNIEXPORT void JNICALL Java_test_use(JNIEnv *env, jobject obj) {
// some code, that used buffer
}
JNIEXPORT void JNICALL Java_test_done(JNIEnv *env, jobject obj) {
free(buffer);
}
UPD:我讀了有關直接緩衝(NewDirectByteBuffer)和全球refererences(NewGlobalRef),但我問,我可以分配內存不使用JNI API,只需用電話「的malloc」
不,這意味着我的示例不正確,因爲我沒有創建全局引用。事實上,我之所以問,是因爲閱讀了本地和全球的參考資料 –