GetClassDemo demo = new GetClassDemo();
Class clazz = demo.getClass(); // 初始化的class
System.out.println("clazz="+clazz);
Object
native方法
public final native Class> getClass();
openjdk8jdksrcsharenativejavalangObject.c
JNIEXPORT jclass JNICALL
Java_java_lang_Object_getClass(JNIEnv *env, jobject this)
{
if (this == NULL) {
JNU_ThrowNullPointerException(env, NULL);
return 0;
} else {
return (*env)->GetObjectClass(env, this); //todo getClass()
}
}
jni_GetObjectClass
openjdk8hotspotsrcsharevmprimsjni.cpp
JNIWrapper("GetObjectClass");
JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj))
#ifndef USDT2
DTRACE_PROBE2(hotspot_jni, GetObjectClass__entry, env, obj);
#else
HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(
env, obj);
#endif
Klass* k = JNIHandles::resolve_non_null(obj)->klass();
jclass ret =
(jclass) JNIHandles::make_local(env, k->java_mirror()); //jniHandles.cpp:63
#ifndef USDT2
DTRACE_PROBE1(hotspot_jni, GetObjectClass__return, ret);
#else
HOTSPOT_JNI_GETOBJECTCLASS_RETURN(
ret);
#endif
return ret;
JNI_END
resolve_non_null
openjdk8hotspotsrcsharevmruntimejniHandles.hpp
inline oop JNIHandles::resolve_non_null(jobject handle) {
oop result = *(oop*)handle;
return result;
};



