Publications
Publications in reversed chronological order.
2025
- CGOSkipFlow: Improving the Precision of Points-to Analysis using Primitive Values and Predicate EdgesDavid Kozak , Codrut Stancu , Tomáš Vojnar , and 1 more authorIn Proceedings of the 23rd ACM/IEEE International Symposium on Code Generation and Optimization , 2025
A typical points-to analysis such as Andersen’s or Steensgaard’s may lose precision because it ignores the branching structure of the analyzed program. Moreover, points-to analysis typically focuses on objects only, not considering instructions manipulating primitive values. We argue that such an approach leads to an unnecessary precision loss, for example, when primitive constants true and false flow out of method calls. We propose a novel lightweight points-to analysis called SkipFlow that interprocedurally tracks the flow of both primitives and objects, and explicitly captures the branching structure of the code using predicate edges. At the same time, however, SkipFlow is as lightweight and scalable as possible, unlike a traditional flow-sensitive analysis. We apply SkipFlow to GraalVM Native Image, a closed-world solution to building standalone binaries for Java applications. We evaluate the implementation using a set of microservice applications as well as well-known benchmark suites. We show that SkipFlow reduces the size of the application in terms of reachable methods by 9% on average without significantly increasing the analysis time.
@inproceedings{cgo25, author = {Kozak, David and Stancu, Codrut and Vojnar, Tom\'{a}\v{s} and Wimmer, Christian}, title = {SkipFlow: Improving the Precision of Points-to Analysis using Primitive Values and Predicate Edges}, year = {2025}, isbn = {9798400712753}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3696443.3708932}, doi = {10.1145/3696443.3708932}, booktitle = {Proceedings of the 23rd ACM/IEEE International Symposium on Code Generation and Optimization}, pages = {347–361}, numpages = {15}, keywords = {compiler, optimization, pointer analysis, points-to analysis, static analysis}, location = {Las Vegas, NV, USA}, series = {CGO '25}, }
2024
- SANERSoftware Architecture Reconstruction for Microservice Systems Using Static Analysis via GraalVM Native ImageRichard Hutcheson , Austin Blanchard , Noah Lambaria , and 3 more authorsIn SANER 2024 , Mar 2024
Microservices are the mainstream architecture when designing cloud-native systems. The performance and elastic scalability of such systems are the main attraction for many vendors. Recent advancements improving microservice initialization times are related to the ahead-of-time compilation, which produces self-contained executables, significantly reducing load times. Despite recent advancements and various benefits of cloud-native systems, the evolution of such systems might be threatened by a missing system-centered view. Such a view would guide in a better contextual understanding of individual microservices and their dependencies from the holistic system perspective and aid developers in informed decisions to mitigate ripple effects. One way literature has addressed this gap is by performing Software Architecture Reconstruction (SAR), a process essential for understanding, maintaining, and evolving software systems. This paper questions whether instruments used to produce self-contained executables for microservices can be utilized for SAR, producing system-centered views. We propose a methodology for such a process, implement a proof of concept tool, MicroGraal, for the Java Platform, and assess it through a case study involving a third-party microservice system benchmark. We uncovered a system service dependency graph and a context map, comparing the approach and obtained results with source code analysis
@inproceedings{saner24, author = {Hutcheson, Richard and Blanchard, Austin and Lambaria, Noah and Hale, Jack and David Kozak, Amr Elsayed and Cerny, Tomas}, title = {Software Architecture Reconstruction for Microservice Systems Using Static Analysis via GraalVM Native Image}, year = {2024}, month = mar, booktitle = {SANER 2024}, publisher = {Institute of Electrical and Electronics Engineers}, url = {https://conf.researchr.org/details/saner-2024/saner-2024-papers/94/Software-Architecture-Reconstruction-for-Microservice-Systems-Using-GraalVM-Native-Im}, keywords = {Software Architecture Reconstruction, Microservices, Service Dependency Graph, GraalVM Native Image}, location = {Rovaniemi, Finland}, series = {SANER}, }
- PLDIScaling Type-Based Points-to Analysis with SaturationDavid Kozak , Codrut Stancu , Christian Wimmer, and 1 more authorIn PLDI , Jun 2024
Designing a whole-program static analysis requires trade-offs between precision and scalability. While a context-insensitive points-to analysis is often considered a good compromise, it still has non-linear complexity that leads to scalability problems when analyzing large applications. On the other hand, rapid type analysis scales well but lacks precision. We use saturation in a context-insensitive type-based points-to analysis to make it as scalable as a rapid type analysis, while preserving most of the precision of the points-to analysis. With saturation, the points-to analysis only propagates small points-to sets for variables. If a variable can have more values than a certain threshold, the variable and all its usages are considered saturated and no longer analyzed. Our implementation in the points-to analysis of GraalVM Native Image, a closed-world approach to build standalone binaries for Java applications, shows that saturation allows GraalVM Native Image to analyze large Java applications with hundreds of thousands of methods in less than two minutes.
@inproceedings{pldi24, author = {Kozak, David and Stancu, Codrut and Wimmer, Christian and Wurthinger, Thomas}, title = {Scaling Type-Based Points-to Analysis with Saturation}, year = {2024}, month = jun, booktitle = {PLDI}, url = {https://d-kozak.github.io/assets/pdf/pldi24.pdf}, doi = {10.1145/3617651.3622980}, series = {PLDI 2024}, }
2023
- MPLRComparing Rapid Type Analysis with Points-To Analysis in GraalVM Native ImageDavid Kozak , Vojin Jovanovic , Codrut Stancu , and 2 more authorsIn Proceedings of the 20th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes , Jun 2023
Whole-program analysis is an essential technique that enables advanced compiler optimizations. An important example of such a method is points-to analysis used by ahead-of-time (AOT) compilers to discover program elements (classes, methods, fields) used on at least one program path. GraalVM Native Image uses a points-to analysis to optimize Java applications, which is a time-consuming step of the build. We explore how much the analysis time can be improved by replacing the points-to analysis with a rapid type analysis (RTA), which computes reachable elements faster by allowing more imprecision. We propose several extensions of previous approaches to RTA: making it parallel, incremental, and supporting heap snapshotting. We present an extensive experimental evaluation of the effects of using RTA instead of points-to analysis, in which RTA allowed us to reduce the analysis time for Spring Petclinic (a popular demo application of the Spring framework) by 64% and the overall build time by 35% at the cost of increasing the image size due to the imprecision by 15%.
@inproceedings{mplr23, author = {Kozak, David and Jovanovic, Vojin and Stancu, Codrut and Vojnar, Tom\'{a}\v{s} and Wimmer, Christian}, title = {Comparing Rapid Type Analysis with Points-To Analysis in GraalVM Native Image}, year = {2023}, isbn = {9798400703805}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3617651.3622980}, doi = {10.1145/3617651.3622980}, booktitle = {Proceedings of the 20th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes}, pages = {129–142}, numpages = {14}, keywords = {GraalVM, Java, ahead-of-time compilation, compiler, optimization, static analysis}, location = {Cascais, Portugal}, series = {MPLR 2023}, }