# HG changeset patch # User Doug Simon # Date 1386791185 -3600 # Node ID 903fd774dd61e0318a8a8de60d260508769c1841 # Parent 29907e69ae8d1a0e51bdef01b80f33038c3caf0c simplified implementation of HotSpotResolvedObjectType.getClassInitializer() diff -r 29907e69ae8d -r 903fd774dd61 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Wed Dec 11 15:59:40 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Wed Dec 11 20:46:25 2013 +0100 @@ -197,7 +197,7 @@ HotSpotResolvedJavaField[] getInstanceFields(HotSpotResolvedObjectType klass); - HotSpotResolvedJavaMethod[] getMethods(HotSpotResolvedObjectType klass); + long getClassInitializer(HotSpotResolvedObjectType klass); boolean hasFinalizableSubclass(HotSpotResolvedObjectType klass); diff -r 29907e69ae8d -r 903fd774dd61 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Wed Dec 11 15:59:40 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Wed Dec 11 20:46:25 2013 +0100 @@ -98,7 +98,7 @@ public native HotSpotResolvedJavaField[] getInstanceFields(HotSpotResolvedObjectType klass); @Override - public native HotSpotResolvedJavaMethod[] getMethods(HotSpotResolvedObjectType klass); + public native long getClassInitializer(HotSpotResolvedObjectType klass); @Override public native int getCompiledCodeSize(long metaspaceMethod); diff -r 29907e69ae8d -r 903fd774dd61 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Dec 11 15:59:40 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Dec 11 20:46:25 2013 +0100 @@ -596,11 +596,9 @@ } public ResolvedJavaMethod getClassInitializer() { - ResolvedJavaMethod[] methods = runtime().getCompilerToVM().getMethods(this); - for (ResolvedJavaMethod m : methods) { - if (m.isClassInitializer()) { - return m; - } + long metaspaceMethod = runtime().getCompilerToVM().getClassInitializer(this); + if (metaspaceMethod != 0L) { + return createMethod(metaspaceMethod); } return null; } diff -r 29907e69ae8d -r 903fd774dd61 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Wed Dec 11 15:59:40 2013 +0100 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Wed Dec 11 20:46:25 2013 +0100 @@ -469,25 +469,10 @@ return JNIHandles::make_local(THREAD, field_array()); C2V_END -C2V_VMENTRY(jobject, getMethods, (JNIEnv *, jobject, jobject klass)) - ResourceMark rm; - +C2V_VMENTRY(jlong, getClassInitializer, (JNIEnv *, jobject, jobject klass)) instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(klass))); - Array* methods = k->methods(); - int methods_length = methods->length(); - - // Allocate result - objArrayOop r = oopFactory::new_objArray(SystemDictionary::HotSpotResolvedJavaMethod_klass(), methods_length, CHECK_NULL); - objArrayHandle result (THREAD, r); - - for (int i = 0; i < methods_length; i++) { - methodHandle method(THREAD, methods->at(i)); - Handle holder = JNIHandles::resolve(klass); - oop m = VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD); - result->obj_at_put(i, m); - } - - return JNIHandles::make_local(THREAD, result()); + Method* clinit = k->class_initializer(); + return (jlong) (address) clinit; C2V_END C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv *env, jobject, jlong addr)) @@ -966,7 +951,7 @@ {CC"lookupFieldInPool", CC"("METASPACE_CONSTANT_POOL"IB)"FIELD, FN_PTR(lookupFieldInPool)}, {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(resolveMethod)}, {CC"getInstanceFields", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_FIELD, FN_PTR(getInstanceFields)}, - {CC"getMethods", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_METHOD, FN_PTR(getMethods)}, + {CC"getClassInitializer", CC"("HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)},