8016bdee7ca1a066221a5d2fe5e60890de950a5b |
|
16-Jun-2016 |
Mathieu Chartier <mathieuc@google.com> |
Use collector specific helper classes Changed to use inner classes. Also changed some visitors to lambdas. Bug: 29413717 Bug: 19534862 (cherry picked from commit a07f55913824ab4215a9a4f827fa9c043c0d44d9) Change-Id: I631c8bfe5f795eda4623c5bb4f357f2dd12358e2
|
a9d82fe8bc6960b565245b920e99107a824ca515 |
|
26-Jan-2016 |
Mathieu Chartier <mathieuc@google.com> |
Use mutator lock to guard adding and removing heap spaces Too hard to add a new lock since dlmalloc ArtMoreCore requires looping through the spaces while holding the allocator lock. Bug: 22858531 Change-Id: Ieac2136da02c766b6795cd604a58798bee37ef2a
|
763a31ed7a2bfad22a9cb07f5301a71c0f97ca49 |
|
17-Nov-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add immune spaces abstraction ImmuneSpaces is a set of spaces which are not reclaimable by the GC in the current collection. This set of spaces does not have requirements about space adjacency like the old ImmuneRegion. ImmuneSpaces generates the largest immune region for the GC. Since there is no requirement on adjacency, it is possible to have multiple non-adjacent applicaton image files. For image spaces, we also look at the oat code which is normally after the application image. In this case, we add the code as part of the immune region. This is required to have both the boot image and the zygote space be in the same immune region (for performance reasons). Bug: 22858531 Change-Id: I5103b31c0e39ad63c594f5557fc848a3b288b43e
|
90443477f9a0061581c420775ce3b7eeae7468bc |
|
17-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move to newer clang annotations Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
|
97509954404d031594b2ecbda607314d169d512e |
|
13-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Clean up GC callbacks to be virtual methods Change-Id: Ia08034a4e5931c4fcb329c3bd3c4b1f301135735
|
414369a2e3f23e1408fc1cbf4f623014bd95cb8f |
|
04-May-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add some more DISALLOW_COPY_AND_ASSIGN May help prevent bugs maybe. (cherry picked from commit 3130cdf29eb203be0c38d1107a65d920ec39c106) Change-Id: Ie73d469dfcd078492ecb3aa28682b42707221202
|
3130cdf29eb203be0c38d1107a65d920ec39c106 |
|
04-May-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add some more DISALLOW_COPY_AND_ASSIGN May help prevent bugs maybe. Change-Id: Ie73d469dfcd078492ecb3aa28682b42707221202
|
bb87e0f1a52de656bc77cb01cb887e51a0e5198b |
|
03-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Refactor and improve GC root handling Changed GcRoot to use compressed references. Changed root visiting to use virtual functions instead of function pointers. Changed root visting interface to be an array of roots instead of a single root at a time. Added buffered root marking helper to avoid dispatch overhead. Root marking seems a bit faster on EvaluateAndApplyChanges due to batch marking. Pause times unaffected. Mips64 is untested but might work, maybe. Before: MarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us After: MarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us Bug: 19264997 Change-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca
|
cb535da36915f9d10bec3880b46f1de1f7a69f22 |
|
23-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Change AtomicStack to use StackReference Previously used Object*, using StackReference saves memory on 64 bit devices. Bug: 12935052 Bug: 17643507 Change-Id: I035878690054eeeb24d655a900b8f26c837703ff
|
e34fa1df67fbe0173b4ea9abddcc3ae3d0537037 |
|
14-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Print more info in MarkSweep::VerifyRoot Refactored old root callback to use a new class called RootInfo. RootInfo contains all the relevant info related to the root associated with the callback. The MarkSweep::VerifyRoot function now uses this info to print the StackVisitor's described location if the GC root is of the type kRootJavaFrame. Some other cleanup. Example output: E/art (12167): Tried to mark 0x123 not contained by any spaces E/art (12167): Attempting see if it's a bad root E/art (12167): Found invalid root: 0x123 with type RootJavaFrame E/art (12167): Location=Visiting method 'void java.lang.Runtime.gc()' at dex PC 0xffffffff (native PC 0x0) vreg=0 (cherry picked from commit 12f7423a2bb4bfab76700d84eb6d4338d211983a) Bug: 18588862 Change-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f
|
12f7423a2bb4bfab76700d84eb6d4338d211983a |
|
14-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Print more info in MarkSweep::VerifyRoot Refactored old root callback to use a new class called RootInfo. RootInfo contains all the relevant info related to the root associated with the callback. The MarkSweep::VerifyRoot function now uses this info to print the StackVisitor's described location if the GC root is of the type kRootJavaFrame. Some other cleanup. Example output: E/art (12167): Tried to mark 0x123 not contained by any spaces E/art (12167): Attempting see if it's a bad root E/art (12167): Found invalid root: 0x123 with type RootJavaFrame E/art (12167): Location=Visiting method 'void java.lang.Runtime.gc()' at dex PC 0xffffffff (native PC 0x0) vreg=0 Bug: 18588862 Change-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f
|
13735955f39b3b304c37d2b2840663c131262c18 |
|
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
stdint types all the way! Change-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08
|
e63db27db913f1a88e2095a1ee8239b2bb9124e8 |
|
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Break apart header files. Create libart-gtest for common runtime and compiler gtest routines. Rename CompilerCallbacksImpl that is quick compiler specific. Rename trace clock source constants to not use the overloaded profiler term. Change-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933
|
52e4b43d62896b56f8c2bd041e528472bb4a0d8d |
|
10-Jun-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add mark compact collector. The mark compact collector is a 4 phase collection, doing a normal full mark_sweep, calculating forwarding addresses of objects in the from space, updating references of objects in the from space, and moving the objects in the from space. Support is diabled by default since it needs to have non movable classes and field arrays. Performance numbers is around 50% as fast. The main advantage that this has over semispace is that the worst case memory usage is 50% since we only need one space isntead of two. TODO: Make field arrays and classes movable. This causes complication since Object::VisitReferences relies on these, so if we update the fields of an object but another future object uses this object to figure out what fields are reference fields it doesn't work. Bug: 14059466 Change-Id: I661ed3b71ad4dde124ef80312c95696b4a5665a1
|