1. A computer-implemented method, comprising: a heap manager receiving a memory allocation request from a thread of a multi-threaded program executing on an execution node of a Non-Uniform Memory Access (NUMA) computer system, the request comprising a block size; in response to said receiving, the heap manager determining an allocation node of the NUMA computer system based, at least in part, on a degree of locality between the allocation node and the execution node. the heap manager locating a block of memory of the given block size on the allocation node; and the heap manager allocating the block of memory to the thread.