Many compiler optimizations and software engineering tools need precise pointer analyses to be effective. Unfortunately, many Java features, such as dynamic class loading, reflection, and native methods, make pointer analyses difficult to develop. Hence, prior pointer analyses for Java either ignore those features or are overly conservative. We describe and evaluate a pointer analysis that deals with all Java language features. Our analysis is based on Andersen’s inclusion-constraint based pointer analysis. For statically-linked languages, Andersen’s analysis finds constraints based on a static wholeprogram analysis of the code, and then propagates the constraints to obtain points-to information. Our version of Andersen’s analysis handles features such as dynamic class loading by generating constraints at runtime and propagating the constraints whenever a client of the analysis needs points-to information. We evaluate the correctness of our analysis by comparing its results w...