Как указывалось в предыдущих ответах, реализация не указана.
Чтобы получить представление о том, как может выглядеть реализация, я рассмотрел часть времени выполнения недавней JVM Hotspot.
В Hotspot каждый объект начинается со слова метки (для GC и других целей) и указателя класса.
Если вы вызываете getClass, будет вызвана нативная реализация в Object.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);
}
}
GetObjectClass является частью JNI API. (http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html)
Внутренняя реализация JNI GetObjectClass действительно просто разрешает указатель объекта, читает класс из указателя класса,
и возвращает Java-представление этого класса:
JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj))
JNIWrapper("GetObjectClass");
HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(env, obj);
Klass* k = JNIHandles::resolve_non_null(obj)->klass();
jclass ret =
(jclass) JNIHandles::make_local(env, k->java_mirror());
HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret);
return ret;
JNI_END