GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-159137: Copy and subtract the GC reference counts in one walk by pablogsal · Pull Request #159163 · python/cpython

Conversation

@pablogsal

@pablogsal pablogsal commented Oct 11, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

The collector walks the generation once in update_refs() to copy every reference count into the GC header, and again in subtract_refs() to subtract the references between the collected objects. In a full collection every tracked object is in the list, so the second walk needs nothing from the first, and this does both in one walk. An object that is decremented before the walk reaches it still holds its _gc_prev pointer, and the walk recovers the decrements from the difference with the pointer it knows was there.

Benchmarks

CPU time spent in the collector, taken in gc.callbacks. Six runs per executable in baseline/candidate/candidate/baseline order; medians of the runs taken while the machine was quiet.

Workload GC before GC after Less GC time
Pylint on five stdlib packages 2.171 s 1.815 s 16.4%
Parso parsing the standard library 1.352 s 1.095 s 19.0%
sqlglot parsing and transpiling 4,000 queries 3.806 s 3.162 s 16.9%
Beautiful Soup parsing 90 HTML pages 2.068 s 1.815 s 12.2%
Geometric mean 16.2%
  • Issue: Speed up garbage collector #159137

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@pablogsal
pythongh-159137: Copy and subtract the GC reference counts in one walk
57465a9
@bedevere-app bedevere-app Bot mentioned this pull request Oct 11, 2026
Speed up garbage collector #159137
Open
@pablogsal
pablogsal marked this pull request as ready for review October 11, 2026 02:37
@pablogsal
pablogsal requested a review from ericsnowcurrently as a code owner October 11, 2026 02:37
@bedevere-app bedevere-app Bot added the awaiting core review label Oct 11, 2026
@pablogsal
pablogsal requested review from nascheme and sergey-miryanov October 11, 2026 02:41
pablogsal added 3 commits October 11, 2026 03:43
@pablogsal
Use the interpreter id counter instead of a static flag
da81986
@pablogsal
Guard on the number of interpreters the process has had
899e80a
@pablogsal
pythongh-159137: Use a shared GC breakpoint in GDB tests
8c28240
@pablogsal

pablogsal commented Oct 12, 2026

Copy link
Copy Markdown
Member Author

Closing this PR. I’ve learned that @brandtbucher's mentee has been working on something very close to this for a while and was planning to open source it once a few things cleared up. Rather than duplicate that effort, I’d prefer to focus on their work and help get it upstream, so I’ll be following up on that instead :)

SurenNihalani reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@pablogsal pablogsal closed this Oct 12, 2026
@pablogsal
pablogsal deleted the gh-159137-gc-fuse-update-subtract branch October 12, 2026 00:29
This was referenced Oct 23, 2026
gh-159137: Reuse candidate pointers in the free-threaded GC mark phase #160462
Closed
gh-159137: Traverse dictionary values as spans in the free-threaded GC #160463
Closed
gh-159137: Skip unnecessary free-threaded GC finalizer and weakref scans #160464
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@ericsnowcurrently ericsnowcurrently Awaiting requested review from ericsnowcurrently ericsnowcurrently is a code owner
@sergey-miryanov sergey-miryanov Awaiting requested review from sergey-miryanov
@nascheme nascheme Awaiting requested review from nascheme

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

awaiting core review

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@pablogsal
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.