RFR: 8343394: Make MemorySessionImpl.state a stable field [v3]
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Oct 31 23:11:28 UTC 2024
On Thu, 31 Oct 2024 18:09:55 GMT, Quan Anh Mai <qamai at openjdk.org> wrote:
>> Hi,
>>
>> This patch makes `MemorySessionImpl.state` a `Stable` field so that liveness check of non-closeable scopes such as the global scope can be elided.
>>
>> Currently, the `state` field is overloaded with 2 responsibilities, to act as a communication device between `close` and `checkValidState`, as well as a communication device between `close`, `acquire`, and `release`. This patch separates those concerns into `state` and `acquireCount`, allowing `state` to be marked as `@Stable`.
>>
>> With the patch, in `MemorySegmentGetUnsafe`, `panama` is able to be on par with `unsafe`:
>>
>> Benchmark Mode Cnt Score Error Units
>> MemorySegmentGetUnsafe.panama avgt 30 0.340 ± 0.008 ns/op
>> MemorySegmentGetUnsafe.unsafe avgt 30 0.332 ± 0.004 ns/op
>>
>> For reference this is the results without this patch:
>>
>> Benchmark Mode Cnt Score Error Units
>> MemorySegmentGetUnsafe.panama avgt 30 0.420 ± 0.019 ns/op
>> MemorySegmentGetUnsafe.unsafe avgt 30 0.329 ± 0.003 ns/op
>>
>> Please kindly review, thanks very much.
>
> Quan Anh Mai has updated the pull request incrementally with one additional commit since the last revision:
>
> fix benchmarks
Actually, @JornVernee pointed out (great observation!) that this PR creates a new asymmetry between liveness and acquired state -- it would be possible to see an acquire failure (e.g. when passing a segment to a native call) while the segment scope still looks alive. We need to think about this some more.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/21810#issuecomment-2450998231
More information about the core-libs-dev
mailing list