Commit 519c1c7b authored by Lokesh Gidra's avatar Lokesh Gidra
Browse files

Cleanup marking logic for non-moving objects

The marking logic for non-moving and large objects currently grays the
read barrier state and sets the mark bitmap together. This causes the
following complexities:
1) Setting the mark bitmap has to be done atomically as application
threads also set the mark bitmap.
2) It requires using a separate false gray stack to handle cases where
due to concurrent execution one thread succeeds in graying the object
even after the object has been already marked.

This can be simplified if non-moving/large objects are treated just like
the unevac-space objects are. Marking the object involves testing
whether the object is already marked in the bitmap or not. If not, then
graying the read barrier state and pushing to the mark stack.
Eventually, GC thread sets the mark bit non-atomically while processing
the reference.

Bug: 119273672
Bug: 112720851
Bug: 119629540
Test: art/test/testrunner/testrunner.py --64
Change-Id: I7050d545d59d5d8b1c90813a982e6f464b15d5e3
parent 94d4f5fa
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment