RFR: 8350983: JShell LocalExecutionControl only needs stopCheck() on backward branches [v3]

Archie Cobbs acobbs at openjdk.org
Tue Apr 22 16:48:43 UTC 2025


On Tue, 22 Apr 2025 14:17:57 GMT, Archie Cobbs <acobbs at openjdk.org> wrote:

>> JShell's `LocalExecutionControl` ensures a running eval thread can be stopped by `JShell.stop()` by inserting an invocation of `stopCheck()` at every branch point in the bytecode of loaded classfiles.
>> 
>> However, this same guarantee can be provided by invoking `stopCheck()` only at backward branches and not at forward branches. By doing this, the performance and size impact on the executing code can be reduced.
>> 
>> Fortunately the new ClassFile API makes this kind of modification easy 👍
>
> Archie Cobbs has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Style improvements based on review comments.

Thanks for the reviews!

FWIW I agree the inserted stop checks are only a partial solution (with or without forward branch checks). E.g., the simplest recursive method has neither forward nor backward branches and so no stop checks would be inserted either way. You'd get an eventual stack overflow, but that could take a long time (e.g., imagine a breadth-first search of an infinite tree). So a possible future improvement would be to add a stop check at the start of each method to handle that type of scenario.

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

PR Comment: https://git.openjdk.org/jdk/pull/23850#issuecomment-2821909421


More information about the kulla-dev mailing list