1. A computer system, comprising: at least one processor; a non-transitory computer readable storage medium tangibly storing data; a software application executable by the at least one processor and programmed to make use of the data; and off-heap memory, dynamically allocated and directly managed by a memory manager, such that the off-heap memory is perceivable by the software application as being a part of local application tier memory and manageable, after initial allocation, independent of other memory managers of the computer system and of an operating system running on the computer system, wherein the off-heap memory is scalable up to a size of the computer system's memory, upon direction from the memory manager, and wherein the memory manager is configured to at least: (a) attempt to allocate first data containers in chunks of a preconfigured maximum size in response to a request for off-heap memory at a predetermined maximum size; (b) repeat said attempts to allocate first data containers until the off-heap memory is created at the predetermined size, or until an attempt fails, whichever comes first; (c) reduce the preconfigured maximum size and repeat (a)-(b) in response to an attempt to allocate first data containers failing; (d) receive a request for a region of the off-heap memory, the region having an associated size; (e) find, via a second data container source, an unused slice of the off-heap memory; (f) return a second data container indicative of the unused slice, the second data container being a wrapped first data container that includes a reference to the slice where data is to be stored and a reference to an allocator object that created the slice; (g) continue to return second data containers until the off-heap memory is exhausted; and (h) manage the returned second data containers from the off-heap memory as a logical address space storing data keys and values.