143 lines
2.7 KiB
Markdown
143 lines
2.7 KiB
Markdown
# PR-3.6 — Implement Sweep Phase (Reclaim Unmarked Objects)
|
||
|
||
### Briefing
|
||
|
||
After marking, the GC must reclaim unreachable objects. This PR implements the sweep phase.
|
||
|
||
### Target
|
||
|
||
* Remove or reclaim unmarked objects.
|
||
* Reset mark bits for the next cycle.
|
||
|
||
### Work items
|
||
|
||
* Iterate over heap storage.
|
||
* For each object:
|
||
|
||
* If unmarked, reclaim it.
|
||
* If marked, clear the mark bit.
|
||
* Ensure handles to reclaimed objects become invalid or reused safely.
|
||
|
||
### Acceptance checklist
|
||
|
||
* [ ] Unreachable objects are reclaimed.
|
||
* [ ] Reachable objects remain intact.
|
||
* [ ] Mark bits are cleared after sweep.
|
||
* [ ] `cargo test` passes.
|
||
|
||
### Tests
|
||
|
||
* Add tests:
|
||
|
||
* Allocate objects, drop references, run sweep, confirm removal.
|
||
* Confirm live objects survive.
|
||
|
||
### Junie instructions
|
||
|
||
**You MAY:**
|
||
|
||
* Implement a simple sweep over the heap vector.
|
||
|
||
**You MUST NOT:**
|
||
|
||
* Implement compaction or handle relocation.
|
||
* Introduce advanced memory strategies.
|
||
|
||
**If unclear:**
|
||
|
||
* Ask before choosing handle invalidation strategy.
|
||
|
||
---
|
||
|
||
# PR-3.7 — Integrate GC Cycle at Safepoint (`FRAME_SYNC`)
|
||
|
||
### Briefing
|
||
|
||
The GC must only run at safepoints. This PR connects the mark-sweep collector to the VM’s safepoint logic, primarily at `FRAME_SYNC`.
|
||
|
||
### Target
|
||
|
||
* Trigger GC cycles only at safepoints.
|
||
* Keep execution deterministic.
|
||
|
||
### Work items
|
||
|
||
* Identify safepoint handling code in the VM.
|
||
* Add logic:
|
||
|
||
* If allocation threshold exceeded, run GC at `FRAME_SYNC`.
|
||
* Ensure GC does not run in arbitrary instruction contexts.
|
||
|
||
### Acceptance checklist
|
||
|
||
* [ ] GC runs only at safepoints.
|
||
* [ ] No GC during arbitrary instruction execution.
|
||
* [ ] VM remains deterministic.
|
||
* [ ] `cargo test` passes.
|
||
|
||
### Tests
|
||
|
||
* Add a test where allocations trigger GC only at `FRAME_SYNC`.
|
||
|
||
### Junie instructions
|
||
|
||
**You MAY:**
|
||
|
||
* Hook GC invocation into safepoint handling.
|
||
|
||
**You MUST NOT:**
|
||
|
||
* Trigger GC at random points.
|
||
* Add background or concurrent GC.
|
||
|
||
**If unclear:**
|
||
|
||
* Ask before modifying safepoint semantics.
|
||
|
||
---
|
||
|
||
# PR-3.8 — GC Smoke and Stress Tests
|
||
|
||
### Briefing
|
||
|
||
We need confidence that the GC behaves correctly under simple and stressed conditions.
|
||
|
||
### Target
|
||
|
||
* Add deterministic smoke and stress tests for the GC.
|
||
|
||
### Work items
|
||
|
||
* Add tests:
|
||
|
||
* Simple allocation and collection cycle.
|
||
* Many short-lived objects.
|
||
* Cyclic references.
|
||
* Ensure tests are deterministic.
|
||
|
||
### Acceptance checklist
|
||
|
||
* [ ] Smoke tests pass.
|
||
* [ ] Stress tests pass.
|
||
* [ ] No nondeterministic failures.
|
||
* [ ] `cargo test` passes.
|
||
|
||
### Tests
|
||
|
||
* New GC-specific tests.
|
||
|
||
### Junie instructions
|
||
|
||
**You MAY:**
|
||
|
||
* Add deterministic tests.
|
||
|
||
**You MUST NOT:**
|
||
|
||
* Introduce random or timing-dependent tests.
|
||
* Modify GC semantics to satisfy tests.
|
||
|
||
**If unclear:**
|
||
|
||
* Ask before changing test scenarios.
|