Each subclass of Allocator represents an allocation algorithm. The allocation algorithm is tightly coupled with the garbage collection algorithm. Each memory area is bound to a single allocation algorithm and no two instances of allocator objects will work in the same memory area. An Allocator can use multiple MemoryAreas (e.g. separate memory areas for different generations). The RawMemoryAccess provides a mechanism to read and write primitives directly into lower level memory. The allocator uses RawMemoryAccess to perform work.