diff options
| author | 2025-02-07 13:32:48 +0000 | |
|---|---|---|
| committer | 2025-02-11 10:58:33 -0800 | |
| commit | dd33afc86bf313c205d28cfba436658aa7a78c4c (patch) | |
| tree | 2ff7d7de6f1d49b392850991a092253eb09ef0bb /compiler/optimizing/graph_visualizer.cc | |
| parent | 01a7d316730f2ed7dac7fa85c9e707ab0241ef82 (diff) | |
Avoid moving old-gen object to young-gen in generational CMC
There were cases (typically during a full-heap collection) that some
object was being moved from old-gen to young-gen. This was happening
in few corner cases. The cases were either when we skipped compaction
(as the objects were too densely packed), or due to aligning down the
mid-gen. Moving an object from old-gen to young-gen causes correctness
problems as this way we miss dirtying the corresponding card if it
contains native-roots to young-gen.
In this CL, we correctly adjust the generation boundaries whenever
compaction is skipped. Also, mid-gen boundary is aligned up (instead of
down). This ensures that once an object is promoted to old-gen, it may
get back to mid-gen, which again gets consumed by old-gen, but never
gets back to young gen.
Test: ART_USE_READ_BARRIER=false art/tools/run-libcore-tests.sh --mode=host --variant=X64 --debug --gcstress
Test: atest CtsPackageManagerTestCases (on aosp cuttlefish device)
Bug: 392794369
Change-Id: I4472b34af3cbf409b2e0478e337c62ffc45c89f5
Diffstat (limited to 'compiler/optimizing/graph_visualizer.cc')
0 files changed, 0 insertions, 0 deletions