Mono 5.4.0 Release Notes
These notes are for a current or upcoming PREVIEW RELEASE and might not reflect the final release.
THIS IS A DRAFT/WORK IN PROGRESS PLACEHOLDER OF THE 5.2 RELEASE NOTES
5.4.0 is unreleased
JIT Job Control
The Runtime now controls concurrent method compilation. It avoid multiple threads compiling the same method at the same time and limits the number of threads simultaneously compiling.
This shows up as performance issue with applications such as Roslyn that very quickly ramp up a lot of threads.
Array element store optimization
Optimize array stores of non-final ref types.
Load scalability improvements
Move a few hot data structures in the type loader to use lock free reads. This shown up a scalability botheneck with Roslyn and Visual Studio for Mac first project load.
ValueType write barrier optimization
Optimize GC write barriers when value types are involved. This shown up as a performance issue with Roslyn.
Make jit method table resizing more scalable
The original table resizing code would count the size of the table on resize, this works fine for small programs but proved to be a problem with Visual Studio for Mac.
Reflection queries scalability improvements
Reflection queries must be cached by the runtime as two identical queries must return the same objects. It now use a lock free data structure for reads. This shown up as a performance issue during Visual Studio for Mac first project load.
for blitable types
This avoid boxing and unboxing an intermediary object. This results in a 30x speedup on a microbenchmark.
Revamped unaligned memory access support
As part of our work to support dotnet platform advances, proper unaligned access was missing from the mono runtime.
This feature is used by the new Span
Interpreter works in JIT restricted environments
There are a few things in the interpreter that still require machine specific trampolines that are written in assembly or managed code.
We used the JIT infrastructure so far for that, but now we added plumbing to the AOT compiler so they can be pre-generated, and thus the interpreter is usable on platforms where code generation is not allowed during execution.
interp option in the man page.
Interpreter supports ARM and ARM64
We added support for those architectures and also test them on CI.
Use AppContextSwitchs from ReferenceSources, which allow all of it compat switches to be used.