On Mon, 7 Sep 2026 19:16:30 GMT, Jorn Vernee <[email protected]> wrote:
>>> does the has_scoped_access machinery still carry weight? >> >> I'd say yes. The scope oop could be live inside a frame that is not doing a >> memory access as well. We still want to avoid deoptimizing in that case. The >> `is_session_live` check alone does not detect whether we're doing a memory >> access or not, and we're already in the scenario where we're not inside >> `@Scoped` code. >> >> In other words, these two mechanisms do different things. >> `has_scoped_access` detects any scoped accesses in the frame, while >> `is_session_live` detects _any_ use of the session. > > FWIW, I've been trying to get some numbers for this, but JMH doesn't really > seem equipped to handle this situation. We need to share a shared arena with > two threads, where one thread does something with the scope oop so it's kept > alive at a safepoint, while the other thread closes the arena. > > I've got the right code setup for the oop to be live at a safepoint without > doing a memory access (we can just get it from `Arena::scope`), but the issue > is that closing the arena requires creating a new one every invocation, and > JMH will do per-invocation setup independently for every benchmark method, > even if the benchmark state is shared within the same thread group (the > different threads will just race to initialize the state before every > invocation). So, one thread will happily create many different arenas while > another is still busy closing just the one. > > I could try to add some kind of synchronization where the accessing thread > will wait for the closing thread to try and ensure they use the same arena, > but that will make the numbers we get out of the measurement pretty much > useless, since we're just measuring the wait time in that case. I've verified that removing the `has_scoped_access` check leads to redundant deoptimizations, and have a benchmark that shows about a 100 microsecond regression for a single deoptimization. So, keeping the `has_scoped_access` check definitely seems worth it. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/30926#discussion_r3969992898
