That's probably a legitimate argument. I only chose Set because it was based on the existing code in WeakHashMap/WeakHashSet. Maybe WeakInterner may be more appropriate.
"although possibly different instance" is THE thing. We only want one instance of each MethodType in the environment so that MethodType.equals is a simple == test. On 2012-03-29, at 9:55 AM, Vitaly Davidovich wrote: > No set that I know of allows you to get the key - you can check for its > presence or remove it. Since containsKey() requires that you pass it the key > to find, there's nothing to return since you already have an equivalent key > (although possibly different instance). If that's not the intent of > WeakInternSet then it shouldn't be called a set :). > > Sent from my phone > > On Mar 29, 2012 5:46 AM, "Jim Laskey" <jlas...@me.com> wrote: > What we are trying to do is intern the MethodType. Maps are designed to > provide the key -> value relationship (one way.) If we only used the key and > a dummy value in the Map, it would be equivalent to a write only collection, > since there is no method to return a found key. We would have to set the > value to sometime meaningful like the existing MethodType. Doing so creates > the hard reference to the MethodType and transitively to the unloadable > Classes. > > We encountered this problem in Nashorn where we generate object classes at > runtime. MethodTypes that referred to these classes "hung on" to them > indefinitely. When running JavaScript test suites, we soon exhausted the > perm gen. > > I tried using WeakHashMap initially but then realized the implications. > WeakHashSet is useless, since it uses WeakHashMap, making it not weak at all. > > This fix has been well tested, as it is integrated in our test system (4 > times a day on several different platforms.) > > > Sent from my iPhone > > On 2012-03-28, at 11:51 PM, Vitaly Davidovich <vita...@gmail.com> wrote: > >> We only care about keys here anyway, right? WeakHashMap with a dummy value >> object (some static reference) should achieve the same thing since its Entry >> will have the key referenced weakly and the value strongly (but we don't >> care since the value is a dummy static ref). Maybe I misunderstood the >> intent though ... >> >> Sent from my phone >> >> On Mar 28, 2012 9:02 PM, "Jim Laskey" <jlas...@me.com> wrote: >> The WeakHashMap leads to a non-weak reference to the class, since only the >> key is weak. Same is true for public versions of WeakHashSet. The collection >> used here is truly weak. >> >> Sent from my iPhone 4 >> >> On 2012-03-28, at 9:42 PM, Vitaly Davidovich <vita...@gmail.com> wrote: >> >>> Hi John, >>> >>> I think you can use diamond generic inference when declaring the weak >>> intern set. >>> >>> Also any reason you didn't use WeakHashMap directly with dummy value to >>> simulate the set? Or wrap the WeakHashMap and synchronize the accessors to >>> it? >>> >>> Sent from my phone >>> >>> On Mar 28, 2012 7:52 PM, "John Rose" <john.r.r...@oracle.com> wrote: >>> http://cr.openjdk.java.net/~jrose/7127687/webrev.00/ >>> >>> 7127687: MethodType leaks memory due to interning >>> Summary: Replace internTable with a weak-reference version. >>> >>> This is a point fix for JDK 8, and will (pending approval) also be >>> back-ported to JDK 7u. >>> >>> — John >>> >>> Notes on process: This code is part of JSR 292. Therefore the review >>> comments will be collected in mlvm-dev, and changes will be integrated via >>> hsx/hotspot-comp. >>> >>> At least one reviewer must be an official Reviewer the JDK 8 Project [1], >>> but other reviewers are most welcome. >>> >>> [1] http://openjdk.java.net/census#jdk8 >>> >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev