Phases in Branch Targets of Java Programs

Recent work on phase detection indicates that programs behave differently at different points in their execution. This paper looks at phases in more detail with respect to indirect calls, which are common in object-oriented programs. We divide phases into three categories: code dependent, context dependent, and data dependent. Of these, code-dependent phases are the easiest to exploit and require no special hardware or compiler support. Data-dependent phases, on the other hand, do require significant hardware or compiler support. Fortunately, we ﬁnd that at least for indirect calls, data-dependent phases are rare for a collection of Java benchmarks.