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