RFR: 8252049: Native memory leak in ciMethodData ctor
David Holmes
dholmes at openjdk.java.net
Fri Nov 27 09:14:02 UTC 2020
On Fri, 27 Nov 2020 08:05:09 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> `ciMethodData` embeds `MethodData` to snapshot a state from the original `MethodData` instance.
> But `MethodData` embeds a `Mutex` which allocates a platform-specific implementation on C-heap.
> The `Mutex` is overwritten with `0`s, but the resources aren't deallocated, so the leak occurs.
>
> Proposed fix is to run Mutex destructor right away.
>
> Initially, I thought about switching to `Mutex*`, but then I found that Coleen already tried that and observed a performance regression [1]. So, for now I chose the conservative approach.
>
> In the longer term, I would consider replacing `MethodData::_extra_data_lock` with a lock-free scheme. Having a lock-per-MDO looks kind of excessive.
>
> Testing:
> - [x] verified that no memory leak observed with the reported test
> - [x] tier1-4
>
> [1] https://mail.openjdk.java.net/pipermail/hotspot-dev/2019-October/039783.html
I can't say this looks pretty. It is also very hard to be able to determine when the mutex was last used and whether this running of the destructor is guaranteed to be safe. What is the lifecycle of the original MethodData?
-------------
PR: https://git.openjdk.java.net/jdk/pull/1478
More information about the hotspot-compiler-dev
mailing list