7127687: MethodType leaks memory due to interning

Rémi Forax forax at univ-mlv.fr
Thu Mar 29 03:26:53 PDT 2012


John,
I think you can remove all public methods of class WeakInternSet
but ,add() i.e. tailor the implementation only for the need, at least 
until Doug Lea
provides a weak/concurent/hashmap in java.util.concurent.

Rémi

On 03/29/2012 11:45 AM, Jim Laskey 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 <vitalyd at gmail.com 
> <mailto:vitalyd at 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" <jlaskey at me.com 
>> <mailto:jlaskey at 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 <vitalyd at gmail.com
>>     <mailto:vitalyd at 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.rose at oracle.com
>>>     <mailto:john.r.rose at oracle.com>> wrote:
>>>
>>>         http://cr.openjdk.java.net/~jrose/7127687/webrev.00/
>>>         <http://cr.openjdk.java.net/%7Ejrose/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 at openjdk.java.net <mailto:mlvm-dev at openjdk.java.net>
>>>         http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>>
>>>     _______________________________________________
>>>     mlvm-dev mailing list
>>>     mlvm-dev at openjdk.java.net <mailto:mlvm-dev at openjdk.java.net>
>>>     http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>
>>     _______________________________________________
>>     mlvm-dev mailing list
>>     mlvm-dev at openjdk.java.net <mailto:mlvm-dev at openjdk.java.net>
>>     http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>
>> _______________________________________________
>> mlvm-dev mailing list
>> mlvm-dev at openjdk.java.net <mailto:mlvm-dev at openjdk.java.net>
>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list