Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Garbage Collection in Python by Benjamin Peterson
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
PyCon 2014
April 12, 2014
5
1.4k
Garbage Collection in Python by Benjamin Peterson
PyCon 2014
April 12, 2014
Tweet
Share
More Decks by PyCon 2014
See All by PyCon 2014
Postgres Performance for Humans by Craig Kerstiens
pycon2014
29
3.7k
Technical Onboarding, Training, and Mentoring by Kate Heddleston and Nicole Zuckerman
pycon2014
1
2.4k
"My big gay adventure. Making, releasing and selling an indie game made in python." by Luke Miller
pycon2014
2
1.7k
Farewell and Welcome Home, Python in Two Genders by Naomi_Ceder
pycon2014
1
780
Deliver Your Software in an Envelope by Augie Fackler and Nathaniel Manista
pycon2014
1
600
Hitchhikers Guide to Free and Open Source Participation by Elena Williams
pycon2014
6
1.2k
Localization Revisted (aka. Translations Evolved) by Ruchi Varshney
pycon2014
0
730
Smart Dumpster by Bradley E. Angell
pycon2014
0
560
Software Engineering for Hackers: Bridging the Two Solitudes by Tavish Armstrong
pycon2014
0
780
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
300
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
130
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
460
Site-Speed That Sticks
csswizardry
13
1.1k
The Curious Case for Waylosing
cassininazir
0
260
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
380
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
320
Transcript
Garbage Collection Benjamin Peterson
Outline ➔ How GC works in various Python implementations ◆
optimizations ➔ GC semantics subtleties
Part 1 Implementation Basics
Bias & Disclaimer
What is GC in Python? ➔ Unused objects are finalized
and deallocated. ➔ When? ◆ “eventually”... or never! ◆ not running out of memory is good
CPython
CPython: reference counting ➔ Every object has a count of
how many other objects want to keep it alive. ➔ New objects have ref count 1. ➔ When ref count is 0, the object can be deleted.
New object Preexisting objects
Preexisting objects New object
Preexisting objects Dead object
Preexisting objects Dead object Dead object
refcounting example
Reference Counting’s Major Flaw Reference Cycles
Preexisting objects
Preexisting objects Cycle keeps itself alive!
CPython’s cyclic GC ➔ Detects cycles unreachable from the program
and deletes them ➔ Runs every once and while on allocation ➔ on CPython
Preexisting objects Cyclic GC subtracts internal references
Preexisting objects Cycles are now deleted
None
PyPy review ➔ Interpreter written in RPython ➔ RPython translated
to low level language (C) ➔ Interpreter is abstracted from low-level details like GC
PyPy has pluggable GCs
PyPy GC ➔ GC is simply another low-level transform during
translation. ➔ GC algorithm itself is written in RPython. ➔ GC implementation can be selected at translation time. ➔ Current default GC: “minmark”
Mark and Sweep ➔ Step 1: Starting from known live
objects, recursively traverse objects, marking them as reachable. ➔ Step 2: Walk all allocated objects, deleting that ones that aren’t marked as alive. ➔ No need to worry about reference cycles.
Preexisting objects Unreachable object Marking
Preexisting objects Unreachable object Marking GC traverses references to C.
Preexisting objects Unreachable object Sweeping GC notices that D is
unreachable and deletes it.
Fancy PyPy GC Optimizations
Python allocates constantly
“High Infant Mortality”
The nursery ➔ Store newly allocated objects in a “nursery”
➔ Collect the “nursery” often and move surviving objects elsewhere (minor collection) ➔ Garbage collect old objects less frequently (major collection)
GC Pauses ➔ When the GC is running, the program
is not. ➔ Inconvenient for many long running programs like servers. ➔ A deal-breaker for real-time applications like video processing.
PyPy incremental GC ➔ In PyPy 2.2 ➔ Major collection
split into multiple passes, each lasting only a few milliseconds. ➔ “All in all it was relatively painless work.”
GC in PyPy summary ➔ Pluggable ➔ Generational ➔ Incremental
➔ Integrated with the JIT
Part 2 GC Semantics
kills kittens
Cycles with finalizers: a conundrum Which finalizer to run first?
Reference to the alive world.
What to do about cycles with ? ➔ CPython <
3.4: give up ➔ CPython >= 3.4: PEP 442 ➔ PyPy: sort finalizers into a “reasonable” order and run them
PEP 442 - “Safe Object Finalization” ➔ Step 1: Run
finalizers on unreachable cycles (arbitrary order). Resurrect any cycles that become reachable again. ➔ Step 2: Break references in remaining cycles.
Themes ➔ Garbage Collection is hard. ➔ (PyPy’s) GCs are
awesome!
Queries? (
[email protected]
) ➔ PyPy Blog (http://morepypy.blogspot.com) ➔ GC module documentation
➔ Wikipedia article on garbage collection ➔ The source ◆ ◆