RFR: 8229345: Memory leak due to vtable stubs not being shared on SPARC
Erik Osterlund
erik.osterlund at oracle.com
Thu Aug 15 18:05:29 UTC 2019
Hi Vladimir,
Thanks for the review!
/Erik
> On 15 Aug 2019, at 19:35, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>
> Agree. Changes are good.
>
> Thanks,
> Vladimir
>
>> On 8/15/19 8:16 AM, Doerr, Martin wrote:
>> Hi Erik,
>> nice change! I like it.
>> We already switched this flag on in SAP JVM on SPARC.
>> We're also convinced that "improves performance markedly for mtrt and compress" is no longer true on recent hardware.
>> Best regards,
>> Martin
>>> -----Original Message-----
>>> From: hotspot-dev <hotspot-dev-bounces at openjdk.java.net> On Behalf Of
>>> Erik Österlund
>>> Sent: Donnerstag, 15. August 2019 17:01
>>> To: hotspot-dev developers <hotspot-dev at openjdk.java.net>
>>> Subject: RFR: 8229345: Memory leak due to vtable stubs not being shared on
>>> SPARC
>>>
>>> Hi,
>>>
>>> The code cache can be occupied by vtable stubs on SPARC. One of the
>>> potential scenarios are continuous creation and unloading of class loaders.
>>> It causes excessive allocation and deallocation of nmethods for classes
>>> in said class loaders. If call patterns are megamorphic, those nmethods
>>> will allocate corresponding vtable stubs for megamorphic inline cache
>>> transitions. While the nmethods are recycled, their corresponding vtable
>>> stubs are never released.
>>>
>>> Normally, it is not a problem that vtable stubs are not cleaned up
>>> during code cache unloading, because they are shared. There is one for
>>> each VM-level signature, and the number of signatures does not grow out
>>> of control.
>>>
>>> However, on SPARC, the vtable stubs are not shared, and are instead
>>> continuously allocated, causing a nasty leak that is considerable.
>>>
>>> SPARC is the only architecture where we do not share vtable stubs. The
>>> switch for opting in to vtable stub sharing is the developer flag
>>> ShareVtableStubs. The description of the flag makes it seem like turning
>>> sharing off is a sweet optimization you can use if your branch
>>> prediction is bad and you would rather use a bit more memory, without
>>> mentioning that you get a nasty memory leak. It's mentioned that two
>>> benchmarks ran faster with sharing turned off. The flag was introduced
>>> longer ago than I can track back (Niagara?!), and since then SPARC
>>> machines have *much* better branch prediction. This flag doesn't seem to
>>> make sense today.
>>>
>>> The obvious solution is to remove the flag and have all architectures
>>> consistently use vtable stub sharing, and hence not leak memory
>>> uncontrollably. So that is what I propose to do about this.
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~eosterlund/8229345/webrev.00/
>>>
>>> Bug:
>>> https://bugs.openjdk.java.net/browse/JDK-8229345
>>>
>>> Thanks,
>>> /Erik
More information about the hotspot-dev
mailing list