JVM_ENTRY自己是一個宏定義,位於interfaceSupport.hpp中html
#define JVM_ENTRY(result_type, header) \ //宏定義,每一個使用這個名字的地方,都會被宏的內容所替代 extern "C" { \ //表示編譯器須要按照C的方式編譯 result_type JNICALL header { \ JavaThread* thread=JavaThread::thread_from_jni_environment(env); \ ThreadInVMfromNative __tiv(thread); \ debug_only(VMNativeEntryWrapper __vew;) \ __ENTRY(result_type, header, thread)
extern "C" 解釋宏定義java
jvm_entry作了什麼segmentfault
java中有一個AccessController.doPrivileged方法。它對應的實現是在jvm.cpp中,原始代碼爲app
JVM_ENTRY(jobject, JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException)) #這裏是省略的方法體 JVM_END
轉換後jvm
extern "C" { \ jobject JNICALL JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException) { \ JavaThread* thread=JavaThread::thread_from_jni_environment(env); \ ThreadInVMfromNative __tiv(thread); \ debug_only(VMNativeEntryWrapper __vew;) \ __ENTRY(result_type, header, thread) #這裏是省略的方法體 } }
JNI 簡介socket