Efficient thread escape analysis in a dynamic compilation environment
Abstract
Thread escape analysis (hereafter referred to as escape analysis) determines what objects may be accessed in more than one thread. Escape analysis has several important client optimizations: identifying objects on which races may exist, identifying locks that can be removed, identifying heap allocated objects referenced within a single thread, and compiling for strict memory models. Escape analyses are often interprocedural, and interprocedural analyses (IPAs) are difficult to perform in dynamic systems for two reasons: (1) IPAs are computationally expensive. (2) Upon new classes being loaded, it can lead to repeatedly performing IPAs. This dissertation provides ways to ameliorate these problems with escape analysis. We first describe a two-phase (offline/online) escape analysis. By performing an offline pre-analysis followed by an online analysis that integrates offline results with dynamic information, significant improvements in performance and accuracy are achieved. We next describe a perfect escape analysis for specific runs of Java programs, which tracks all possible escaping objects at runtime, and determines precisely which ones escape. By comparing the perfect escape analysis results with the results from the previously best-known escape analyses, we show that the relative precision of different escape analyses changes with different clients and that the most precise analysis for each client is "close enough" to the perfect analysis for three out of the four clients. Finally, we describe two classloading strategies to dramatically limit re-analyses when performing IPA. By applying these techniques to perform the two-phase escape analysis, significant speedups relative to the default non-preloading classloader are achieved.
Degree
Ph.D.
Advisors
Midkiff, Purdue University.
Subject Area
Electrical engineering|Computer science
Off-Campus Purdue Users:
To access this dissertation, please log in to our
proxy server.