RFR: 8301404: Replace os::malloc with os::realloc, so we only have 1 code path
Gerard Ziemski
gziemski at openjdk.org
Tue Mar 18 18:18:52 UTC 2025
On Tue, 11 Mar 2025 18:33:47 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:
> This is the 2nd time I am proposing this (controversial?) change, but this time I do have performance numbers, which indicate no change in speed (using NMTBenchmark from https://github.com/openjdk/jdk/pull/23786):
>
> proposed:
>
>
> time:72,642,827[ns]
> [samples:807,804] [NMT headers:382,064]
> [malloc#:588,703] [realloc#:12,462] [free#:206,639]
> memory requested:57,274,288 bytes, allocated:69,004,800 bytes
> malloc overhead:4,853,360 bytes [8.47%], NMT headers overhead:6,877,152 bytes [12.01%]
>
>
> existing code:
>
>
> time:73,085,446[ns]
> [samples:807,804] [NMT headers:382,064]
> [malloc#:588,703] [realloc#:12,462] [free#:206,639]
> memory requested:57,274,288 bytes, allocated:69,004,800 bytes
> malloc overhead:4,853,360 bytes [8.47%], NMT headers overhead:6,877,152 bytes [12.01%]
>
>
> Note: the NMTBenchmark reports `realloc(nullptr)` as `mallocs()`, which is why both versions show the same count for `mallocs/reallocs`.
>
> The performance is virtually the same where I sampled each test 30 times and took the best (the shortest).
>
> This proposed change factors out the common code and simplifies both os::malloc and os::realloc. We were able to reduce malloc from 44 lines down to 8 (saving of 36 lines) and realloc from 84 to 55 (29 lines).
>
> To me the most important part here is that we reduce the number of times that NMT has to interact with the native allocation code.
@tstuefe Thomas, I now have performance numbers, which seem to indicate no speed regression. What do you think? Is it worth it in your opinion?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/23994#issuecomment-2725240376
More information about the hotspot-runtime-dev
mailing list