我正在編寫利用JNI的文本/ VoIP程序的C++/Native端。目前在C++端有三個函數可能會被Java代碼定期調用。功能被調用的頻率取決於用戶發送/接收文本消息的頻率以及他們的朋友在改變其存在/狀態方面的活躍程度。三個函數中的每一個都遵循下面的僞代碼,我不確定是否明智(甚至可能)在函數內「全局化」任何東西。JNI「優化」值得嗎?
JNIEnv *env;
if (jvm_->GetEnv((void**) &env, JNI_VERSION_1_6) < 0)
{
[print error and return]
}
jclass stringclass = env->FindClass("java/lang/String"); // Same for all 3
jstring passinfo = env->NewStringUTF([str-info-to-pass]); // Different for all 3
jclass cls = env->FindClass([directory to calling Java function class]); // Same for all 3
[check if cls found, print error if not found and return]
jmethodID methID = env->GetStatisMethodID([arguments for the function]); // Different for all 3
[check if methID found, print error if not found and return]
jobjectArray args = env->NewObjectArray([arguments to build argument structure being passed to function]);
[call Java function, passing right arguments]
我在想,我應該/將能夠在移動JCLASS stringclass,JCLASS CLS和JNIEnv的* ENV出來的功能,使他們的JNI_OnLoad函數調用期間設置的全局變量。這是可能的/可取的嗎?這些值與這些函數的OnLoad函數有什麼不同?我應該將它們實例化爲全局變量,並且每次都在函數調用中設置它們?而且,做任何這些都能真正提高性能,並且有顯着的提高?
謝謝!不僅事情看起來運行得更快,而且代碼也更清晰。 – AeroBuffalo 2012-08-17 19:39:36