Simula didn't invent garbage collection. The first language to include support for garbage collection was Lisp, in 1959. Aside from the ALGOL-like syntax, Simula would be very familiar to a C++ or Java programmer today.
The garbage collection in Simula was one of the more interesting aspects of how the language was implemented. In a garbage-collected language, rather than having an explicit stack, you have a linked list of activation records (which may then be implemented by using the stack on some architectures). This design allowed things allocated in a lexical scope to persist longer than the function that returned them.
In Simula, a class was simply implemented as a subroutine that returned a pointer to its activation record. Although classes were part of the language, the implementation only really provided closures—classes were just a little bit of syntactic sugar around them.
This abstraction is very powerful, and it wasn't until Self that anyone realized quite how powerful. Self exposes an object model to the programmer that is very close to how Simula worked under the hood.
We've looked at object orientation a bit, as Simula provided some of the core concepts. In part 3 of this series, we'll examine Smalltalk, the first language to be designed embodying the object orientation model.