This chapter has two objectives. The first one is to provide an overview of managed runtime environments, their architecture, and main functionalities. The second one is to provide a discussion regarding the challenges that heterogeneous programming models for hardware acceleration pose to managed runtime environments.