Support for dynamic heap resizing
We need to add support for dynamic heap resizing. Currently MMTk only works with a fixed heap size.
This probably will involve at least the following:
- Extending the vm interface to support at least i) min heap, ii) max heap, and iii) no specified heap size.
- Adding a number of heap resizing heuristics, probably modeled on existing production systems (eg OpenJDK, PyPy, Julia).
Note: this feature is missing for historical reasons: MMTk was purely a research tool and in that setting, heap resizing is both unimportant (it is useful / essential for end users who don't want to have to specific heap sizes), and a problem (it can confound the measurement of the key time/space tradeoff). Our focus is much broader now, and the absence of this feature is becoming a problem.
The minimal we need to do is to allow bindings to set a heap size through an API during run-time. In that case, a VM can implement its own heuristics for heap resizing. To facilitate a binding's implementation, we may provide a standard heap resizing implementation.
So for us, we may have the following:
- Fixed heap size
- Up to VM
- Dynamic heap resizing (min/max) - optional
For dynamic heap resizing, we can consider using https://dl.acm.org/doi/10.1145/3563323.