Previous to this, we were flushing all cached handles whenever a capi function exited. We had a bug where we should have been updating all capi handles when a capi function was entered. We now do 2 sets of logic. The first is a faster, more simple logic of updating/flushing handles seen by the current NativeFrame. This includes non-local handles passed to R*(). This should deal with all reasonable extensions fine. We also introduce -Xcapi.global_flush which when on will cause all cached handles to be flushed/update on capi call boundaries.
Currently deoptimizes if a method hits 500 uncommon branches. 500 was picked via a little tuning on a specific benchmark, but should be investigated more.
This gives us a good memory savings, around 100M for a full spec run.
This gives the young GC the ability to tune the age an object must reach before being promoted based on whats going on in the GC.
Use -Xagent.port=<number> to tell the agent to startup and listen on that TCP port. It will speak BERT.
Use -Xjit.inline.blocks to enable this for now
-Xconfig.print=2 will show descriptions
* Changes thread::Condition to not protect against spurious wakeups. The calling code must do that. * Adds StopTheWorld, a thread tracker that uses checkpoints to stop all thread activity. * Removes rbx. from a number of configuration variables.
This also adds the first step of making the system internally thread-safe, ie, the ability to remove the GIL. The SymbolTable is can now be called from multiple threads at the same time.