我有以下原生程序:
void sendMessage(const char* text)
{
JNIEnv* env;
if(!_jvm)
return;
_jvm->AttachCurrentThread(&env, NULL);
if(!_nativesCls)
_nativesCls = env->FindClass("com/foo/BaseLib");
if(_nativesCls == 0)
return;
jstring message = env->NewStringUTF(text);
if(!_sendStr)
_sendStr = env->GetStaticMethodID(_nativesCls, "onMessage", "(Ljava/lang/String;)V");
if(_sendStr)
env->CallStaticVoidMethod(_nativesCls, _sendStr, message);
//env->ReleaseStringUTFChars(message, text); // <----- * NOT WORKING
}
如果我按原样运行,它会正常运行,直到内存填满并收到:
ReferenceTable overflow(max = 512)
我认为添加上面的注释行可以解决问题,但这只会导致应用程序在此时爆炸。
有什么建议吗?
答案 0 :(得分:3)
DeleteLocalRef()。就像在JNI中分配的任何其他Java对象一样。但是,一旦JNI方法返回,它将自动被垃圾收集。详情请见http://download.oracle.com/javase/1.3/docs/guide/jni/spec/design.doc.html#1242