Mercurial > hg > graal-jvmci-8
changeset 23992:1b8892b4ce9c
lazily cache the name of a HotSpotResolvedJavaMethodImpl
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 31 Jan 2017 16:44:20 +0100 |
parents | 4913d70f630b |
children | 7b65bd0ebeb7 |
files | jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethod.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodUnresolved.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java src/share/vm/jvmci/jvmciCompilerToVM.cpp |
diffstat | 5 files changed, 34 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java Mon Jan 30 09:59:50 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java Tue Jan 31 16:44:20 2017 +0100 @@ -503,6 +503,11 @@ native String getFieldName(HotSpotResolvedObjectTypeImpl holder, int index); /** + * Gets the name of {@code method}. + */ + native String getMethodName(HotSpotResolvedJavaMethodImpl method); + + /** * Looks for the next Java stack frame matching an entry in {@code methods}. * * @param frame the starting point of the search, where {@code null} refers to the topmost frame
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethod.java Mon Jan 30 09:59:50 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethod.java Tue Jan 31 16:44:20 2017 +0100 @@ -59,23 +59,12 @@ return res; } - protected String name; - /** * Controls whether {@link #toString()} includes the qualified or simple name of the class in * which the method is declared. */ public static final boolean FULLY_QUALIFIED_METHOD_NAME = false; - protected HotSpotMethod(String name) { - this.name = name; - } - - @Override - public final String getName() { - return name; - } - @Override public final String toString() { char h = FULLY_QUALIFIED_METHOD_NAME ? 'H' : 'h';
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodUnresolved.java Mon Jan 30 09:59:50 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMethodUnresolved.java Tue Jan 31 16:44:20 2017 +0100 @@ -31,15 +31,20 @@ */ final class HotSpotMethodUnresolved extends HotSpotMethod { + private final String name; private final Signature signature; protected JavaType holder; HotSpotMethodUnresolved(String name, Signature signature, JavaType holder) { - super(name); + this.name = name; this.holder = holder; this.signature = signature; } + public String getName() { + return name; + } + @Override public Signature getSignature() { return signature;
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java Mon Jan 30 09:59:50 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java Tue Jan 31 16:44:20 2017 +0100 @@ -74,6 +74,7 @@ private HotSpotMethodData methodData; private byte[] code; private Executable toJavaCache; + private String nameCache; /** * Gets the holder of a HotSpot metaspace method native object. @@ -106,8 +107,6 @@ } HotSpotResolvedJavaMethodImpl(HotSpotResolvedObjectTypeImpl holder, long metaspaceMethod) { - // It would be too much work to get the method name here so we fill it in later. - super(null); this.metaspaceMethod = metaspaceMethod; this.holder = holder; @@ -126,9 +125,6 @@ this.constantPool = compilerToVM().getConstantPool(this); } - final int nameIndex = UNSAFE.getChar(constMethod + config.constMethodNameIndexOffset); - this.name = constantPool.lookupUtf8(nameIndex); - final int signatureIndex = UNSAFE.getChar(constMethod + config.constMethodSignatureIndexOffset); this.signature = (HotSpotSignature) constantPool.lookupSignature(signatureIndex); } @@ -146,6 +142,13 @@ return UNSAFE.getAddress(metaspaceMethod + config().methodConstMethodOffset); } + public String getName() { + if (nameCache == null) { + nameCache = compilerToVM().getMethodName(this); + } + return nameCache; + } + @Override public boolean equals(Object obj) { if (this == obj) { @@ -328,12 +331,12 @@ @Override public boolean isClassInitializer() { - return "<clinit>".equals(name) && isStatic(); + return isStatic() && "<clinit>".equals(getName()); } @Override public boolean isConstructor() { - return "<init>".equals(name) && !isStatic(); + return !isStatic() && "<init>".equals(getName()); } @Override @@ -564,7 +567,7 @@ } else { // Do not use Method.getDeclaredMethod() as it can return a bridge method // when this.isBridge() is false and vice versa. - result = searchMethods(holder.mirror().getDeclaredMethods(), name, returnType, parameterTypes); + result = searchMethods(holder.mirror().getDeclaredMethods(), getName(), returnType, parameterTypes); } toJavaCache = result; return result;
--- a/src/share/vm/jvmci/jvmciCompilerToVM.cpp Mon Jan 30 09:59:50 2017 +0100 +++ b/src/share/vm/jvmci/jvmciCompilerToVM.cpp Tue Jan 31 16:44:20 2017 +0100 @@ -1122,6 +1122,12 @@ return JNIHandles::make_local(THREAD, name()); C2V_END +C2V_VMENTRY(jobject, getMethodName, (JNIEnv*, jobject, jobject jvmci_method)) + Method* method = CompilerToVM::asMethod(jvmci_method); + Handle name = java_lang_String::create_from_symbol(method->name(), CHECK_NULL); + return JNIHandles::make_local(THREAD, name()); +C2V_END + bool matches(jobjectArray methods, Method* method) { objArrayOop methods_oop = (objArrayOop) JNIHandles::resolve(methods); @@ -1529,8 +1535,8 @@ {CC"getStackTraceElement", CC"("HS_RESOLVED_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, {CC"methodIsIgnoredBySecurityStackWalk", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)}, {CC"doNotInlineOrCompile", CC"("HS_RESOLVED_METHOD")V", FN_PTR(doNotInlineOrCompile)}, - {CC"isCompilable", CC"(" HS_RESOLVED_METHOD ")Z", FN_PTR(isCompilable)}, - {CC"hasNeverInlineDirective", CC"(" HS_RESOLVED_METHOD ")Z", FN_PTR(hasNeverInlineDirective)}, + {CC"isCompilable", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(isCompilable)}, + {CC"hasNeverInlineDirective", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(hasNeverInlineDirective)}, {CC"shouldInlineMethod", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(shouldInlineMethod)}, {CC"lookupType", CC"("STRING CLASS"Z)"HS_RESOLVED_KLASS, FN_PTR(lookupType)}, {CC"lookupNameInPool", CC"("HS_CONSTANT_POOL"I)"STRING, FN_PTR(lookupNameInPool)}, @@ -1548,12 +1554,12 @@ {CC"resolveInvokeDynamicInPool", CC"("HS_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeDynamicInPool)}, {CC"resolveInvokeHandleInPool", CC"("HS_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeHandleInPool)}, {CC"resolveMethod", CC"("HS_RESOLVED_KLASS HS_RESOLVED_METHOD HS_RESOLVED_KLASS")"HS_RESOLVED_METHOD, FN_PTR(resolveMethod)}, - {CC "getSignaturePolymorphicHolders", CC "()[" STRING, FN_PTR(getSignaturePolymorphicHolders)}, + {CC"getSignaturePolymorphicHolders", CC"()[" STRING, FN_PTR(getSignaturePolymorphicHolders)}, {CC"getVtableIndexForInterfaceMethod", CC"("HS_RESOLVED_KLASS HS_RESOLVED_METHOD")I", FN_PTR(getVtableIndexForInterfaceMethod)}, {CC"getClassInitializer", CC"("HS_RESOLVED_KLASS")"HS_RESOLVED_METHOD, FN_PTR(getClassInitializer)}, {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_KLASS")Z", FN_PTR(hasFinalizableSubclass)}, {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, - {CC"asResolvedJavaMethod", CC "(" EXECUTABLE ")" HS_RESOLVED_METHOD, FN_PTR(asResolvedJavaMethod)}, + {CC"asResolvedJavaMethod", CC"(" EXECUTABLE ")" HS_RESOLVED_METHOD, FN_PTR(asResolvedJavaMethod)}, {CC"getResolvedJavaMethod", CC"(Ljava/lang/Object;J)"HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethod)}, {CC"getConstantPool", CC"(Ljava/lang/Object;)"HS_CONSTANT_POOL, FN_PTR(getConstantPool)}, {CC"getResolvedJavaType", CC"(Ljava/lang/Object;JZ)"HS_RESOLVED_KLASS, FN_PTR(getResolvedJavaType)}, @@ -1574,6 +1580,7 @@ {CC"hasCompiledCodeForOSR", CC"("HS_RESOLVED_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)}, {CC"getSymbol", CC"(J)"STRING, FN_PTR(getSymbol)}, {CC"getFieldName", CC"("HS_RESOLVED_KLASS"I)"STRING, FN_PTR(getFieldName)}, + {CC"getMethodName", CC"("HS_RESOLVED_METHOD")"STRING, FN_PTR(getMethodName)}, {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "["RESOLVED_METHOD"I)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)}, {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)}, {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)}, @@ -1581,7 +1588,7 @@ {CC"flushDebugOutput", CC"()V", FN_PTR(flushDebugOutput)}, {CC"methodDataProfileDataSize", CC"(JI)I", FN_PTR(methodDataProfileDataSize)}, {CC"interpreterFrameSize", CC"("BYTECODE_FRAME")I", FN_PTR(interpreterFrameSize)}, - {CC"compileToBytecode", CC "(" OBJECT ")V", FN_PTR(compileToBytecode)}, + {CC"compileToBytecode", CC"(" OBJECT ")V", FN_PTR(compileToBytecode)}, }; int CompilerToVM::methods_count() {