Skip to content
This repository was archived by the owner on Jun 18, 2026. It is now read-only.

perf: array-based BFS in computeStress() — eliminates HashMap/boxing overhead - #124

Closed
sauravbhattacharya001 wants to merge 1 commit into
masterfrom
perf/array-based-stress-bfs
Closed

sauravbhattacharya001 wants to merge 1 commit into
masterfrom
perf/array-based-stress-bfs

Conversation

@sauravbhattacharya001

Copy link
Copy Markdown
Owner

What

Replaces HashMap-based all-pairs BFS in \ForceDirectedLayout.computeStress()\ with array-based BFS using reusable \int[]\ arrays.

Why

The previous implementation allocated V \HashMap<String,Integer>\ objects (one per source via \GraphUtils.bfsDistances), each containing V entries with boxed Integer values. For a 1000-node graph: ~1M boxed integers + ~1000 HashMaps, all immediately GC'd.

How

  • Build \int[][]\ adjacency once (same pattern as \NodeCentralityAnalyzer)
  • Reuse single \int[n]\ distance + queue arrays across all BFS iterations
  • Pre-extract positions into \double[][]\ for cache-friendly inner loop
  • Eliminate all String-based HashMap lookups in the hot path

Impact

Reduces GC pressure and improves cache locality. Most noticeable on graphs with 500+ vertices where \computeStress()\ dominates \getQualityReport()\ cost.

Automated by Repo Gardener 🌱

The stress computation previously allocated V HashMap<String,Integer>
objects (one per source vertex via GraphUtils.bfsDistances), each with
V entries containing boxed Integer values. For a 1000-node graph this
created ~1M boxed integers and ~1000 HashMaps that were used once and
immediately garbage-collected.

Replace with array-based BFS using reusable int[] arrays:
- Single int[n] distance array reset with Arrays.fill per source
- int[n] queue array reused across all BFS iterations
- int[][] adjacency list built once (same pattern as NodeCentralityAnalyzer)
- Pre-extracted positions into flat double[][] for cache-friendly access
- Eliminates all String-based HashMap lookups in the inner loop

This reduces GC pressure and improves cache locality, particularly
noticeable on graphs with 500+ vertices where computeStress() is the
dominant cost in getQualityReport().
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@github-actions github-actions Bot added visualization Graph visualization and UI size/m labels Mar 26, 2026
@sauravbhattacharya001

Copy link
Copy Markdown
Owner Author

Closing: superseded or conflicting with newer changes already on main/master.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

size/m visualization Graph visualization and UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant