diff options
Diffstat (limited to 'runtime/gc/heap.h')
| -rw-r--r-- | runtime/gc/heap.h | 40 |
1 files changed, 11 insertions, 29 deletions
diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h index 7a9ef1e3b1..f71de1ac89 100644 --- a/runtime/gc/heap.h +++ b/runtime/gc/heap.h @@ -35,7 +35,7 @@ #include "jni.h" #include "object_callbacks.h" #include "offsets.h" -#include "reference_queue.h" +#include "reference_processor.h" #include "safe_map.h" #include "thread_pool.h" #include "verify_object.h" @@ -54,6 +54,9 @@ namespace mirror { } // namespace mirror namespace gc { + +class ReferenceProcessor; + namespace accounting { class HeapBitmap; class ModUnionTable; @@ -215,7 +218,7 @@ class Heap { // Check sanity of all live references. void VerifyHeap() LOCKS_EXCLUDED(Locks::heap_bitmap_lock_); - bool VerifyHeapReferences() + bool VerifyHeapReferences(bool verify_referents = true) EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_, Locks::mutator_lock_); bool VerifyMissingCardMarks() EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_, Locks::mutator_lock_); @@ -314,21 +317,6 @@ class Heap { return discontinuous_spaces_; } - static mirror::Object* PreserveSoftReferenceCallback(mirror::Object* obj, void* arg); - void ProcessSoftReferences(TimingLogger& timings, bool clear_soft, - IsMarkedCallback* is_marked_callback, - MarkObjectCallback* mark_object_callback, - ProcessMarkStackCallback* process_mark_stack_callback, void* arg) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) - EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); - void ProcessReferences(TimingLogger& timings, bool clear_soft, - IsMarkedCallback* is_marked_callback, - MarkObjectCallback* mark_object_callback, - ProcessMarkStackCallback* process_mark_stack_callback, - void* arg) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) - EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); - // Enable verification of object references when the runtime is sufficiently initialized. void EnableObjectValidation() { verify_object_mode_ = kVerifyObjectSupport; @@ -565,6 +553,10 @@ class Heap { } bool HasImageSpace() const; + ReferenceProcessor* GetReferenceProcessor() { + return &reference_processor_; + } + private: void Compact(space::ContinuousMemMapAllocSpace* target_space, space::ContinuousMemMapAllocSpace* source_space) @@ -631,12 +623,6 @@ class Heap { bool IsValidContinuousSpaceObjectAddress(const mirror::Object* obj) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); - void EnqueueClearedReferences(); - // Returns true if the reference object has not yet been enqueued. - void DelayReferenceReferent(mirror::Class* klass, mirror::Reference* ref, - IsMarkedCallback is_marked_callback, void* arg) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); - // Run the finalizers. void RunFinalization(JNIEnv* env); @@ -797,12 +783,8 @@ class Heap { Mutex* gc_complete_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; UniquePtr<ConditionVariable> gc_complete_cond_ GUARDED_BY(gc_complete_lock_); - // Reference queues. - ReferenceQueue soft_reference_queue_; - ReferenceQueue weak_reference_queue_; - ReferenceQueue finalizer_reference_queue_; - ReferenceQueue phantom_reference_queue_; - ReferenceQueue cleared_references_; + // Reference processor; + ReferenceProcessor reference_processor_; // True while the garbage collector is running. volatile CollectorType collector_type_running_ GUARDED_BY(gc_complete_lock_); |