RFR: 8268406: Deallocate jmethodID native memory [v7]
Coleen Phillimore
coleenp at openjdk.org
Fri Jun 20 20:57:31 UTC 2025
On Thu, 19 Jun 2025 06:33:08 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
>> Coleen Phillimore has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Add a basic gtest.
>
> I feel apprehensive about this; the solution feels pretty complex and I am not fully convinced this is the simplest solution for this problem.
>
> How much space to we lose in real life? Side note: I see the payload of the jmethodID block in NMT is allocated with mtInternal, so we don't see it in NMT. We should add jmethodIDs as an own category to NMT.
>
> A pragmatic alternative solution could be to do delete them, but delayed: keep the last N methodblocks undeleted. It is rare that JNI accesses jmethodIDs long after they have been deleted. Typically, the bad access happens close after class unloading, e.g. because of concurrency problems in customer code.
>
> We could then make the parameter N configurable, and thus give customers and supporters a tool to check for these kind of errors.
>
> (I briefly wondered whether we could just mmap these blocks, and uncommit/mprotect them on release, so that we stop paying the memory costs but don't release the address space; but the coarser page size allocation granularity would make this probably forbidding in terms of mem cost per class)
@tstuefe I think your method would still have a race and still allow a stale pointer crash, but just less likely, with more code to manage how to delete these pointers.
The memory leak for jmethodIDs has been observed in our testing, resulting in native OOMs. We discussed a few things to solve this in the bugs, and this was the best idea we had at the time. It is a big change though.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25267#issuecomment-2992826422
More information about the hotspot-dev
mailing list