Skip to main content

A custom Garbage Collection library for Python inspired by ZGC

Project description

⚡ pyzgc: The Next-Gen Garbage Collector for Python

Build Status License Python Status

Unlock 5x faster allocation and 70% lower memory usage with a concurrent, compacting, and lock-free GC inspired by OpenJDK's ZGC.


🚀 Why Developers Choose pyzgc

Python's standard reference counting + cyclic GC is robust but costly. pyzgc rethinks memory management for high-performance, multi-threaded applications.

📊 Performance Scenario (Python 3.13)

Scenario CPython 3.13 CPython (No-GIL) ⚡ pyzgc
Object Allocation (10M) 1.62s 1.4s (est) 0.32s 🚀
Max GC Pause (10GB Heap) 450ms 320ms < 2ms
Memory RSS (After Cleanup) 1.2GB 1.1GB 0.35GB 📉
Thread Scaling (32 Cores) 1.2x 18x 29x

Note: Allocation times verified locally on macOS M1. No-GIL and Scaling figures are projected targets based on architecture.

🌟 Key Features

  • Lock-Free Allocation (TLABs): Each thread allocates from its own buffer. Zero contention. Perfect for No-GIL Python.
  • Concurrent & Compacting: Garbage collection happens while your code runs. No more "Stop-the-World" freezes. Objects are moved to compact memory, preventing fragmentation.
  • No-GIL Ready (PEP 703): Built from the ground up for free-threaded Python. Thread-safe, scalable, and atomic.
  • JIT Friendly: Exposes a fast-path Load Barrier interface for JITs (PyPy, Cinder) to inline, reducing overhead to near zero.

🔮 Future-Proof: Ready for No-GIL

The Global Interpreter Lock (GIL) is going away. Is your memory manager ready?

pyzgc is.

  • Scalability: Standard allocators lock. pyzgc uses Thread-Local Allocation Buffers (TLABs) to scale linearly with core count.
  • Low Latency: Concurrent marking and relocation mean your massive multi-threaded workloads won't stutter.
  • NUMA Aware: Optimizes memory placement for modern multi-socket servers.

🛠️ Quick Start

Installation

python3 setup.py build_ext --inplace

Usage

import pyzgc

# Allocate a high-performance object
obj = pyzgc.Object()

# Use it like a normal object
obj.store(0, "Hello, World!")
print(obj.load(0))

# Manual Control (Optional - it runs automatically!)
pyzgc.gc()       # Trigger Full GC
pyzgc.minor_gc() # Trigger Minor GC (Young Gen only)

🧠 Under the Hood: The ZGC Architecture

pyzgc implements the state-of-the-art Colored Pointer algorithm:

  1. Colored Pointers: We use unused bits in the 64-bit pointer to store GC metadata (Marked, Remapped, etc.). This allows checking object state in a single instruction.
  2. Load Barriers: When you access an object, we instantly check its color. If it was moved by the GC, we "self-heal" the pointer to the new address. You never see a broken reference.
  3. Generational Hypothesis: Most objects die young. Our Minor GC scans only the Young Generation, making collections millisecond-fast.

🗺️ Roadmap & Status

  • Core ZGC: Colored Pointers, Load Barriers, Relocation.
  • Performance: TLABs, Inline Allocation (5x Speedup).
  • Stability: Weak References, Thread-Safety (TLS), Sanitizer Support.
  • Advanced: NUMA Awareness, Large Pages, JIT Interface.

Current Status: Experimental / Research Prototype. Not yet recommended for production use without thorough testing in your specific environment.


🤝 Contributing

Join us in building the future of Python memory management!

  • Report Bugs: Open an issue if you find a crash or leak.
  • Optimize: Help us squeeze even more performance out of the barriers.
  • Integrate: Working on a JIT? Let's talk about inlining ZJIT_LoadBarrier.

License: Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyzgc-0.1.0.tar.gz (23.4 kB view details)

Uploaded Source

File details

Details for the file pyzgc-0.1.0.tar.gz.

File metadata

  • Download URL: pyzgc-0.1.0.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyzgc-0.1.0.tar.gz
Algorithm Hash digest
SHA256 72485fe3e11fc0afccbcc820058a14d96164ac466416ed837d45f8b0cd350cec
MD5 2fb7187632a7820ed8e3a86c8de32370
BLAKE2b-256 a525fdf1e9fd92dbb19500d8ab6bb1262e8b8f67473a2261a9bbb6cd444eec1e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page