Я получил утечку памяти, создав новый байтовый массив с jni.
Я пробовал DeleteLocalRef, DetachCurrentThread и ReleaseByteArrayElements.
int on_header_field(http_parser *parser, const char *at, size_t length)
{
int attached = 0;
int ret;
jbyteArray data;
void *tmp;
HttpConnection *connection = parser->data;
JavaHttpServer *server = connection->server->data;
JNIEnv *env;
if ((*jvm)->GetEnv(jvm, &env, JNI_VERSION_1_8) == JNI_EDETACHED) {
(*jvm)->AttachCurrentThread(jvm, &env, NULL);
attached = 1;
}
data = (*env)->NewByteArray(env, length);
tmp = (*env)->GetPrimitiveArrayCritical(env, data, 0);
memcpy(tmp, at, length);
(*env)->ReleasePrimitiveArrayCritical(env, data, tmp, 0);
ret = (*env)->CallIntMethod(env, server->object, server->onHeaderField, (jlong)connection, data);
(*env)->DeleteLocalRef(env, data);
if (attached) {
(*jvm)->DetachCurrentThread(jvm);
}
return ret;
}
Эта функция вызывает утечку памяти. Но я не знаю почему.
Я ожидаю, что у меня не будет увеличения памяти, когда я тестирую ее много раз. Я уже тестировал его без этой части кода, и он работал нормально!