We are in the multi-core era. Dynamically-typed languages are in widespread use, but their support for multithreading
still lags behind. One of the reasons is that the sophisticated techniques they use to efficiently represent their dynamic
object models are often unsafe in multithreaded environments.
This paper defines safety requirements for dynamic object models in multithreaded environments. Based on these
requirements, a language-agnostic and thread-safe object model is designed that maintains the efficiency of sequential
approaches. This is achieved by ensuring that field reads do not require synchronization and field updates only need to
synchronize on objects shared between threads.
Basing our work on JRuby+Truffle, we show that our safe object model has zero overhead on peak performance for
thread-local objects and only 3% average overhead on parallel benchmarks where field updates require synchroniza-
tion. Thus, it can be a foundation for safe and efficient multithreaded VMs for a wide range of dynamic languages.