It is well known that functional languages are naturally amenable to parallelism: for example, a purely functional program can be executed in parallel without any modifications and is guaranteed to run correctly. Achieving efficient parallelism in functional languages, however, remains difficult. This is largely due to the need for efficient and scalable memory management, as functional programs tend to allocate new data at a high rate. In this talk, I will present a technique, called hierarchical memory management, for managing the memory of nested-parallel functional programs. At a high level, the idea is to organize memory such that it mirrors the nesting structure of parallel tasks, forming a dynamic hierarchy (tree) of heaps. Within the hierarchy, we can leverage a disentanglement property of parallel functional programs in order to perform garbage collection efficiently in parallel. I will discuss how to implement these ideas in practice, and present empirical results from our own implementation. Specifically, we have extended the MLton Standard ML compiler with support for nested parallelism, and our experiments show that the overall approach performs well, significantly improving efficiency over existing functional language implementations.