Dual JVM
From APIDesign
A heroic effort was needed to marry the fast start of the Enso engine (to be attributed to AOT compilation) with the need to dynamically load JVM classes. The effort is being called a "dual JVM" (see slides) because there are two Java virtual machines running in the single Enso process communicating effectively with each other.
Apache Arrow
The essential use-case was driven by the need to exchange columnar data between those two JVMs. We decided to support zero copy exchange of data (mostly) in the Apache Arrow format between those two JVMs. Performance seems to be sufficiently good and the format allows us to integrate with other Arrow-ready systems like Pandas when the time comes.
- Pros: similar system was an enterprise only feature called GraalVM Isolates
- Cons: the Isolates are being open sourced and further work may be needed to align with them