Abstract
Context sensitivity is an essential technique for ensuring high precision in Java pointer analyses. It has been observed that applying context sensitivity partially, only on a select subset of the methods, can improve the balance between analysis precision and speed. However, existing techniques are based on heuristics that do not provide much insight into what characterizes this method subset. In this work, we present a more principled approach for identifying precision-critical methods, based on general patterns of value flows that explain where most of the imprecision arises in context-insensitive pointer analysis. Accordingly, we provide an efficient algorithm to recognize these flow patterns in a given program and exploit them to yield good tradeoffs between analysis precision and speed. Our experimental results on standard benchmark and real-world programs show that a pointer analysis that applies context sensitivity partially, only on the identified precision-critical methods, preserves effectively all (98.8%) of the precision of a highly-precise conventional context-sensitive pointer analysis (2-object-sensitive with a context-sensitive heap), with a substantial speedup (on average 3.4X, and up to 9.2X).
Original language | English |
---|---|
Article number | 141 |
Journal | Proceedings of the ACM on Programming Languages |
Volume | 2 |
Issue | OOPSLA |
Pages (from-to) | 141:1-141:29 |
Number of pages | 29 |
ISSN | 2475-1421 |
DOIs | |
Publication status | Published - 24 Oct 2018 |
Event | The ACM SIGPLAN conference on Systems, Programming, Languages and Applications: Software for Humanity - Boston, United States Duration: 4 Nov 2018 → 9 Nov 2018 Conference number: 2018 https://2018.splashcon.org/home |
Conference
Conference | The ACM SIGPLAN conference on Systems, Programming, Languages and Applications: Software for Humanity |
---|---|
Number | 2018 |
Country/Territory | United States |
City | Boston |
Period | 04/11/2018 → 09/11/2018 |
Internet address |
Keywords
- Java
- Points-to analysis
- Static analysis