Systems such as a Java virtual machine are typically able to perform reasonably under a range of environmental variables. They are designed to make moderate choices and avoid catastrophic degradation. As a side effect of their conservative design, JVMs do not take advantage of opportunities that may present themselves; they fail to leverage extra memory when it may be useful, or to streamline their usage to improve performance.
One reason many systems cannot make better decisions is that they are not aware of the availability of resources within the larger system in which they operate. We present a resent extension to the typical memory management system that allows it to improve system throughput. Program-level adaptive memory management optimizes a Java program's heap size at runtime, and leads to average execution speeds 1.6 to 6.5 times as fast as the default virtual machine heap sizing (depending on the garbage collector). Building from this recent work, we continue with a series of proposed extensions to memory systems. We explore the possibilities of adaptive data structures that leverage resource information to improve access times. Finally we propose an API to allow greater control over memory management decisions at the program level.