Object models capture key properties of object-oriented architectures, and they can highlight relationships between types,
occurrences of sharing, and object encapsulation. We present a dynamic analysis to extract object models from legacy code
bases. Our analysis reconstructs each intermediate heap from a log of object allocations and field writes, applies a sequence
of abstraction-based operations to each heap, and combines the results into a single object model that conservatively approximates
all observed heaps from the program’s execution. The resulting object models reflect many interesting and useful architectural
properties.