changeset 23710:927a39cd7ddd

Use ClassValue instead of WeakHashMap to track ResolvedJavaTypes
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Tue, 21 Jun 2016 14:36:31 -0700
parents 1b939a613788
children 387870951564
files jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java
diffstat 1 files changed, 7 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java	Tue Jun 21 14:36:16 2016 -0700
+++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIMetaAccessContext.java	Tue Jun 21 14:36:31 2016 -0700
@@ -27,8 +27,6 @@
 import java.lang.ref.WeakReference;
 import java.util.Arrays;
 import java.util.Iterator;
-import java.util.Map;
-import java.util.WeakHashMap;
 
 import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.ResolvedJavaType;
@@ -147,7 +145,12 @@
         }
     }
 
-    private final Map<Class<?>, WeakReference<ResolvedJavaType>> typeMap = new WeakHashMap<>();
+    private final ClassValue<ResolvedJavaType> resolvedJavaType = new ClassValue<ResolvedJavaType>() {
+        @Override
+        protected ResolvedJavaType computeValue(Class<?> type) {
+            return createClass(type);
+        }
+    };
 
     /**
      * Gets the JVMCI mirror for a {@link Class} object.
@@ -155,13 +158,7 @@
      * @return the {@link ResolvedJavaType} corresponding to {@code javaClass}
      */
     public synchronized ResolvedJavaType fromClass(Class<?> javaClass) {
-        WeakReference<ResolvedJavaType> typeRef = typeMap.get(javaClass);
-        ResolvedJavaType type = typeRef != null ? typeRef.get() : null;
-        if (type == null) {
-            type = createClass(javaClass);
-            typeMap.put(javaClass, new WeakReference<>(type));
-        }
-        return type;
+        return resolvedJavaType.get(javaClass);
     }
 
     /**