feat: reuse seenEdge and seenNode to reduce garbage collection pressure (#575)
Co-authored-by: Kalyana Chadalavada <kalyanac@users.noreply.github.com>
diff --git a/internal/graph/graph.go b/internal/graph/graph.go
index dba7bad..74b904c 100644
--- a/internal/graph/graph.go
+++ b/internal/graph/graph.go
@@ -319,6 +319,8 @@
// nodes.
func newGraph(prof *profile.Profile, o *Options) (*Graph, map[uint64]Nodes) {
nodes, locationMap := CreateNodes(prof, o)
+ seenNode := make(map[*Node]bool)
+ seenEdge := make(map[nodePair]bool)
for _, sample := range prof.Sample {
var w, dw int64
w = o.SampleValue(sample.Value)
@@ -328,8 +330,12 @@
if dw == 0 && w == 0 {
continue
}
- seenNode := make(map[*Node]bool, len(sample.Location))
- seenEdge := make(map[nodePair]bool, len(sample.Location))
+ for k := range seenNode {
+ delete(seenNode, k)
+ }
+ for k := range seenEdge {
+ delete(seenEdge, k)
+ }
var parent *Node
// A residual edge goes over one or more nodes that were not kept.
residual := false