JeX : an implementation of a Java exception analysis framework to exploit potential optimisations.
Exceptions in Java are generated by explicit program syntax or implicit events at runtime. The
potential control flow paths introduced by these implicit exceptions must be represented in static
flow graphs. The impact of these additional paths reduces the effectiveness of standard aheadof-
time optimisations. This thesis presents research that focuses on measuring and reducing the
effects of these implicit exceptions.
In order to conduct this research, a novel static analysis framework, called JeX, has been developed.
This tool provides an environment for the analysis and optimisation of Java programs
using the bytecode representation. Data generated by this tool clearly shows that implicit exceptions
significantly fragment the standard flow graphs used by many intraprocedural optimisation
techniques. This fragmentation increases the number of flow dependence relationships and so
negatively affects numerous flow analysis techniques.
The main contribution of this work is the development of new algorithms that can statically
prove that certain runtime exceptions can never occur. Once these exceptions have been extracted,
the control flow structures are re-generated without being affected by those potential exceptions.
The results show that these algorithms extract 24-29% of all implicit potential exceptions in the
eight benchmark programs selected. The novel, partial stack evaluation algorithm is particularly
successful at extracting potential null pointer exceptions, with reductions in these of 53-68%.
This thesis also provides a simulation of perfect exception extraction by removing the effects of
all implicit exceptions in the flow graphs.
The secondary contribution of this research is the development of program call graph generation
algorithms with novel receiver prediction analysis. This thesis presents a comparative study
of the graphs generated using fast but conservative analysis with more effective rapid type analysis
algorithms. This study shows that Java bytecodes are well suited to a fine-grained instance prediction
type analysis technique, although this context-sensitive approach does not scale well with
larger test programs.
The final contribution of this work is the JeX tool itself. This is a generic, whole program analysis
system for Java programs. It includes a number of general optimisation modules, algorithms
for generating several static analysis data structures and a visualisation interface for viewing all
data structures and Java class file contents