From 3bb57c7b41bf5419fe895e7aa664d8d430205ba8 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Tue, 18 Feb 2014 11:38:45 -0800 Subject: Change ProcessReferences to not use RecursiveMarkObject. Calling ProcessMarkStack in RecursiveMarkObject caused a lot of overhead due to timing logger splits. Changed the logic to be the same as prior to the reference queue refactoring which involves calling process mark stack after preserving soft references and enqueueing finalizer references. FinalizingGC longest pause is reduced by around 1/2 down to ~300ms. Benchmark score ~400000 -> ~600000. Also changed the timing logger splits in the GC to have (Paused) if the split is a paused part of the GC. Bug: 12129382 Change-Id: I7476d4f23670b19d70738e2fd48e37ec2f57e9f4 --- runtime/object_callbacks.h | 1 + 1 file changed, 1 insertion(+) (limited to 'runtime/object_callbacks.h') diff --git a/runtime/object_callbacks.h b/runtime/object_callbacks.h index 6af338bd57..468ba08a43 100644 --- a/runtime/object_callbacks.h +++ b/runtime/object_callbacks.h @@ -60,6 +60,7 @@ typedef void (VerifyRootCallback)(const mirror::Object* root, void* arg, size_t // address the object (if the object didn't move, returns the object input parameter). typedef mirror::Object* (IsMarkedCallback)(mirror::Object* object, void* arg) __attribute__((warn_unused_result)); +typedef void (ProcessMarkStackCallback)(void* arg); } // namespace art -- cgit v1.2.3