Mercurial > hg > graal-jvmci-8
changeset 23985:05922ce51c5e
Restore extra level of weakness in the ResolvedJavaType cache
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 23 Jan 2017 15:50:05 -0800 |
parents | 7139570e01c0 |
children | 6d2c72b822b0 |
files | jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java Mon Jan 23 12:12:16 2017 -0800 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java Mon Jan 23 15:50:05 2017 -0800 @@ -145,10 +145,10 @@ } } - private final ClassValue<ResolvedJavaType> resolvedJavaType = new ClassValue<ResolvedJavaType>() { + private final ClassValue<WeakReference<ResolvedJavaType>> resolvedJavaType = new ClassValue<WeakReference<ResolvedJavaType>>() { @Override - protected ResolvedJavaType computeValue(Class<?> type) { - return createClass(type); + protected WeakReference<ResolvedJavaType> computeValue(Class<?> type) { + return new WeakReference<>(createClass(type)); } }; @@ -157,8 +157,16 @@ * * @return the {@link ResolvedJavaType} corresponding to {@code javaClass} */ - public synchronized ResolvedJavaType fromClass(Class<?> javaClass) { - return resolvedJavaType.get(javaClass); + public ResolvedJavaType fromClass(Class<?> javaClass) { + ResolvedJavaType javaType = null; + while (javaType == null) { + WeakReference<ResolvedJavaType> type = resolvedJavaType.get(javaClass); + javaType = type.get(); + if (javaType == null) { + resolvedJavaType.remove(javaClass); + } + } + return javaType; } /**