Java points-to graphs#

Release:

6.1.2

Date:

Oct 28, 2026

Exhaustive, field-sensitive points-to graphs for Java programs, produced by the analysis of “Giga-scale exhaustive points-to analysis for Java in under a minute”. Edges are the points-to relations (allocations, assignments, loads, stores, calls, returns); reversed edges are auto-generated from the forward edges and are not stored (see Graphs).

Graph

Num Nodes

Num Edges

Reachable pairs

Size (MB)

Download

gson

14114

17467

56325

0.268

gson.tar.gz 📥

sunflow

15464

15957

16354

0.129

sunflow.tar.gz 📥

lusearch

15774

14994

9242

0.114

lusearch.tar.gz 📥

luindex

18532

17375

9677

0.133

luindex.tar.gz 📥

avrora

24690

25196

21532

0.212

avrora.tar.gz 📥

mockito

25436

31194

16169

0.249

mockito.tar.gz 📥

commons_io

26188

31214

24020

0.261

commons_io.tar.gz 📥

commons_lang3

40970

48427

27553

0.371

commons_lang3.tar.gz 📥

eclipse

41383

40200

21830

0.208

eclipse.tar.gz 📥

h2

44717

56683

92038

0.263

h2.tar.gz 📥

pmd

54444

59329

60518

0.460

pmd.tar.gz 📥

xalan

58476

62758

52382

0.320

xalan.tar.gz 📥

junit5

59818

74685

129598

0.453

junit5.tar.gz 📥

batik

60175

63089

45968

0.310

batik.tar.gz 📥

fop

86183

83016

76615

0.417

fop.tar.gz 📥

tomcat

111327

110884

82424

0.563

tomcat.tar.gz 📥

guava

129562

168116

26384496

1.06

guava.tar.gz 📥

jackson

149404

197678

3108775

1.22

jackson.tar.gz 📥

jython

191895

260034

561720

1.05

jython.tar.gz 📥

tradebeans

439693

466969

696316

2.33

tradebeans.tar.gz 📥

tradesoap

440680

468263

698567

2.34

tradesoap.tar.gz 📥

Canonical grammars#

Grammars for the field-sensitive analysis of Java programs introduced in “Giga-scale exhaustive points-to analysis for Java in under a minute”. Template for these grammars is described on the Java Points-to page.

\[\begin{split}\textit{PointsTo} \, \rightarrow \, (\textit{assign} \mid \textit{load}_f \, \textit{Alias} \, \textit{store}_f)^{*} \, \textit{alloc} \, \\ \textit{Alias} \, \rightarrow \, \textit{PointsTo} \, \textit{FlowsTo} \, \\ \textit{FlowsTo} \, \rightarrow \, \textit{alloc}_r \, (\textit{assign}_r \mid \textit{store}_{r\_f} \, \textit{Alias} \, \textit{load}_{r\_f})^* \, \\ \forall \, f \, \in \, Fields\end{split}\]

Optimized variant#

An equivalent WCNF grammar introduced as optimization (5) in “Optimization of the Context-Free Language Reachability Matrix-Based Algorithm” (Fig. 1(b)) is stored in each archive as java_points_to_muravev2024.cnf. It generates the same language and returns identical reachable-pair counts (verified with FastMatrixCFPQ on small graphs).

The archives of this category use two label conventions for the field-indexed labels: the indexed template (load_i, …) and the bare family form (load, …). The stored optimized variant follows the convention of its archive — the indexed form below, or the same productions with every _i suffix dropped (LPFS, LP, FS, SPFL, SP, FL) for the bare-form archives.

PT   alloc
PT   assign  PT
PT   LPFS_i  PT
FT   alloc_r
FT   FT      assign_r
FT   FT      SPFL_i
LPFS_i       LP_i    FS_i
LP_i load_i  PT
FS_i FT      store_i
SPFL_i       SP_i    FL_i
SP_i store_r_i       PT
FL_i FT      load_r_i

Count:
PT