It is a system where a run-time component takes responsibility for managing the lifetime of objects and the heap memory that they occupy.