mirror of
https://github.com/oven-sh/bun
synced 2026-02-14 21:01:52 +00:00
### What does this PR do? Releasing heap access causes all the heap helper threads to wake up and lock and then unlock futexes, but it's important to do that to ensure finalizers run quickly. That means releasing heap access is a balance between: 1. CPU usage 2. Memory usage Not releasing heap access causes benchmarks like https://github.com/oven-sh/bun/pull/14885 to regress due to finalizers not being called quickly enough. Releasing heap access too often causes high idle CPU usage. For the following code: ``` setTimeout(() => {}, 10 * 1000) ``` command time -v when with defaultRemainingRunsUntilSkipReleaseAccess = 0: > > Involuntary context switches: 605 > command time -v when with defaultRemainingRunsUntilSkipReleaseAccess = 5: > > Involuntary context switches: 350 > command time -v when with defaultRemainingRunsUntilSkipReleaseAccess = 10: > > Involuntary context switches: 241 > Also comapre the #14885 benchmark with different values. The idea here is if you entered JS "recently", running any finalizers that might've been waiting to be run is a good idea. But if you haven't, like if the process is just waiting on I/O then don't bother. ### How did you verify your code works?