Problem Reducing overhead from dynamic memory allocation. Forces Most strongly object-oriented programs keep most of their data on the heap rather than on the stack. While object lifetimes are usually longer than procedure activation record lifetimes, they are still short relative to the overall program life. The overhead for a dynamic memory block can be large in both space and time relative to the using program.
Fragmentation is a pernicious problem when a program uses a single heap for all class objects.
Each class manages dynamic data for its instances. Memory can be statically engineered, or allocated at run time in large blocks. Overall memory utilization might be improved by reduced fragmentation, but might be impeded by the need to pre-allocate large blocks. The program is now more complex because the user owns memory management, with multiple memory pools, each one of which may comprise multiple blocks allocated from the operating system. The change leaves the application logic untouched.