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;
     }
 
     /**