RFR: 8349146: [REDO] Implement a better allocator for downcalls

Per Minborg pminborg at openjdk.org
Wed Apr 23 17:07:16 UTC 2025


On Wed, 23 Apr 2025 14:05:58 GMT, Per Minborg <pminborg at openjdk.org> wrote:

> This PR is based on the work of @mernst-github and aims to implement an _internal_ thread-local 'stack' allocator, which works like a dynamically sized arena, but with reset functionality to reset the allocated size back to a certain level. The underlying memory could stay around between calls, which could improve performance.
> 
> Re-allocated segments are not zeroed between allocations.

Here are the current benchmark results:


Benchmark                            (ELEM_SIZE)  Mode  Cnt   Score   Error  Units
BufferStackBench.OfVirtual.buffer              8  avgt   15  12.653 ± 0.180  ns/op
BufferStackBench.OfVirtual.buffer             16  avgt   15  12.573 ± 0.121  ns/op
BufferStackBench.OfVirtual.buffer             32  avgt   15  12.712 ± 0.252  ns/op
BufferStackBench.OfVirtual.confined            8  avgt   15  22.714 ± 0.146  ns/op
BufferStackBench.OfVirtual.confined           16  avgt   15  24.269 ± 1.079  ns/op
BufferStackBench.OfVirtual.confined           32  avgt   15  25.519 ± 0.219  ns/op
BufferStackBench.buffer                        8  avgt   15   4.866 ± 0.141  ns/op
BufferStackBench.buffer                       16  avgt   15   4.829 ± 0.106  ns/op
BufferStackBench.buffer                       32  avgt   15   4.809 ± 0.071  ns/op
BufferStackBench.confined                      8  avgt   15  22.768 ± 0.448  ns/op
BufferStackBench.confined                     16  avgt   15  23.380 ± 0.192  ns/op
BufferStackBench.confined                     32  avgt   15  25.874 ± 1.129  ns/op


and


Benchmark                              Mode  Cnt   Score   Error  Units
CallOverheadByValue.OfVirtual.byPtr    avgt   15   4.140 ± 0.054  ns/op
CallOverheadByValue.OfVirtual.byValue  avgt   15  16.698 ± 0.347  ns/op
CallOverheadByValue.byPtr              avgt   15   4.120 ± 0.028  ns/op
CallOverheadByValue.byValue            avgt   15  11.828 ± 0.082  ns/op

> Can we just cleanly revert commit [7764742](https://github.com/openjdk/jdk/commit/77647421c5b13738f6fa145bf30cbb9dd741e164)?
> This new version defines redundant sealed interface + record - feels unnecessary to me.
> Meanwhile, the BufferStackBench is valueable, but its addition should be kept in a separate commit to make reviewing easier.

The idea was to use records for trusted components and less boilerplate. The idea with the interface was to hide the record accessors a bit.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/24829#issuecomment-2824439716
PR Comment: https://git.openjdk.org/jdk/pull/24829#issuecomment-2824676176


More information about the core-libs-dev mailing list