Mercurial > hg > graal-jvmci-8
diff jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java @ 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 | 6d2c72b822b0 |
children | 11f0412408cd |
line wrap: on
line diff
--- 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;