In this thesis we address the problem of interprocedural analysis on a dynamic application. We present a framework for performing partial analysis ahead of time and using it to facilitate a large range of runtime analyses and optimizations. We demonstrate one such analysis by performing swift, safe analysis during profiling of threaded, dynamically Iinked, adaptively compiled applications. In our framework, we focus on one such language, Java; however) our techniques are adaptable to others within this realm. We also
present models for adaptive compilation utilizing our framework to verify compilation assumptions in the event of dynamic class loading. We present our system for performing a subset of analyses ahead of time by constructing a graph called a Compact Dataft,ow Graph (CDG), of the object references used intraprocedurally. The CDG is designed to be independent of the internal representation used by the runtime and general enough to facilitate a large range of dynamic interprocedural analysis and optimizations. We present our design and implementation of one such use of the CDG by using it to swiftly construct a form of a unification points-to graph we call an Object Connectr,on Graph(OCG), which is used to determine swiftly a set of method local allocations that could be safely stack ailocated. We present results for the use of the OCG using a subset of the threaded Java Grande benchmarks, and a set of small Java threaded applications.