2006•Unpublished venueRequires access

Pointer analysis for java programs: novel techniques and applications

Martin Rinard, Alexandru Sălcianu

Open publisher page 20 citations

Abstract

This dissertation presents a pointer analysis for Java programs, together with several practical analysis applications. For each program point, the analysis is able to construct a points-to graph that describes how local variables and object fields point to objects. Each points-to graph also contains escape information that identifies the objects that are reachable from outside the analysis scope. Our pointer analysis can extract correct information by analyzing only parts of a whole program. First, our analysis analyzes a method without requiring information about its calling context. Instead, our analysis computes parameterized results that are later instantiated for each relevant call site. Second, our analysis correctly handles calls to unanalyzable methods (e.g., native methods). Hence, our analysis can trade precision for speed without sacrificing correctness: if the analysis of a call to a specific callee requires too much time, the analysis can treat that callee as unanalyzable. The results of our analysis enable standard program optimizations like the stack allocation of local objects. More interestingly, this dissertation explains how to extend the analysis to detect pure methods. Our analysis supports a flexible definition of method purity: a method is pure if it does not mutate any object that exists in the program state before the start of the method. Therefore, our analysis allows pure methods to allocate and mutate temporary objects (e.g., iterators) and/or construct complex object structures and return them as a result.

About this research paper

What this paper is about

This dissertation presents a pointer analysis for Java programs, together with several practical analysis applications. For each program point, the analysis is able to construct a points-to graph that describes how local variables and object fields point to objects. Each points-to graph also contains escape information that identifies the objects that are reachable from outside the analysis scope. Our pointer analysis can extract correct information by analyzing only parts of a whole program. First, our analysis analyzes a method without requiring information about its calling context. Instead, our analysis computes parameterized results that are later instantiated for each relevant call site. Second, our analysis correctly handles calls to unanalyzable methods (e.g., native methods). Hence, our analysis can trade precision for speed without sacrificing correctness: if the analysis of a call to a specific callee requires too much time, the analysis can treat that callee as unanalyzable. The results of our analysis enable standard program optimizations like the stack allocation of local objects. More interestingly, this dissertation explains how to extend the analysis to detect pure methods. Our analysis supports a flexible definition of method purity: a method is pure if it does not mutate any object that exists in the program state before the start of the method. Therefore, our analysis allows pure methods to allocate and mutate temporary objects (e.g., iterators) and/or construct complex object structures and return them as a result.

Why it matters

OpenAlex reports 20 citations for this work. Citation counts describe recorded attention and do not establish research quality.

Key contribution

A contribution statement is not available in the OpenAlex record.

Method / approach

Method details are not available in the OpenAlex metadata.

Main findings

Findings are not separately available in the OpenAlex metadata.

Limitations

Limitations are not available in the OpenAlex metadata.

Applications

Application details are not available in the OpenAlex metadata.

Available abstract

This dissertation presents a pointer analysis for Java programs, together with several practical analysis applications. For each program point, the analysis is able to construct a points-to graph that describes how local variables and object fields point to objects. Each points-to graph also contains escape information that identifies the objects that are reachable from outside the analysis scope. Our pointer analysis can extract correct information by analyzing only parts of a whole program. First, our analysis analyzes a method without requiring information about its calling context. Instead, our analysis computes parameterized results that are later instantiated for each relevant call site. Second, our analysis correctly handles calls to unanalyzable methods (e.g., native methods). Hence, our analysis can trade precision for speed without sacrificing correctness: if the analysis of a call to a specific callee requires too much time, the analysis can treat that callee as unanalyzable. The results of our analysis enable standard program optimizations like the stack allocation of local objects. More interestingly, this dissertation explains how to extend the analysis to detect pure methods. Our analysis supports a flexible definition of method purity: a method is pure if it does not mutate any object that exists in the program state before the start of the method. Therefore, our analysis allows pure methods to allocate and mutate temporary objects (e.g., iterators) and/or construct complex object structures and return them as a result.

Key concepts: Pointer analysis, Call graph, Computer science, Programming language, Correctness, Program analysis, Static analysis, Java

Related papers

Back to paper searchBrowse research topicsOriginal source
Pointer analysis for java programs: novel techniques and applications — Research Paper | ScholarLens