# gc/pools
Diagnostic: walk every GC retention pool — per-kind free lists, small-string
and small-keyword buckets, CHAMP buckets, slabs, vector-trie nodes, and the
keyword table. O(pooled objects), so it is for leak triage, not hot paths.
## Syntax
[gc/pools]
## Examples
[gc/pools] # → %{ :live_objs 10460 # :free_total 0 # :free_by_kind @{} # :small_str_total 0 :small_str_by_len @{} # :small_kw_total 0 :small_kw_by_len @{} # :champ_free 0 :champ_nodes_live 3703 # :trie_nodes_live 0 :keywords 90 # :str_slab_bytes 458752 :kw_slab_bytes 65536 # :map_slab_bytes 131072 :champ_slab_bytes 262144 # :transient_objs 0 :bytes_allocated 1065508 }
## Returns
A map of counters: `:live_objs`, `:free_total`, `:free_by_kind`,
`:small_str_total`, `:small_str_by_len`, `:small_kw_total`,
`:small_kw_by_len`, `:champ_free`, `:champ_nodes_live`, `:trie_nodes_live`,
`:str_slab_bytes`, `:kw_slab_bytes`, `:map_slab_bytes`,
`:champ_slab_bytes`, `:transient_objs`, `:keywords`, and
`:bytes_allocated`. `:free_by_kind` is indexed per object kind; the
`:small_str_by_len` / `:small_kw_by_len` vectors are indexed by string
length. Counters are point-in-time snapshots — compare across calls to spot
pool growth. `nil` without a VM context.
## See Also
`gc/census`, `gc/stats`, `gc/collect`