1. A method of inferring heap invariants for program objects maintained by a program in heap memory, comprising: causing the program to execute over a period in an execution environment having a heap memory managed using garbage collection; creating meta data to track invariants of the program objects created by the program in the heap memory; upon a vitality check of the program objects in a garbage collection pass, checking the invariants of the program objects and updating the meta data based on results of the checking; and producing data reporting the invariants satisfied by the program objects over the period of execution of the program.