diff options
Diffstat (limited to 'runtime/gc')
-rw-r--r-- | runtime/gc/accounting/card_table.h | 2 | ||||
-rw-r--r-- | runtime/gc/accounting/heap_bitmap.h | 1 | ||||
-rw-r--r-- | runtime/gc/accounting/mod_union_table.cc | 1 | ||||
-rw-r--r-- | runtime/gc/accounting/space_bitmap.h | 5 | ||||
-rw-r--r-- | runtime/gc/collector/garbage_collector.h | 2 | ||||
-rw-r--r-- | runtime/gc/collector/mark_sweep.h | 3 | ||||
-rw-r--r-- | runtime/gc/collector/partial_mark_sweep.h | 1 | ||||
-rw-r--r-- | runtime/gc/collector/semi_space.cc | 27 | ||||
-rw-r--r-- | runtime/gc/collector/sticky_mark_sweep.h | 5 | ||||
-rw-r--r-- | runtime/gc/heap.h | 3 | ||||
-rw-r--r-- | runtime/gc/reference_queue.h | 1 | ||||
-rw-r--r-- | runtime/gc/space/bump_pointer_space.h | 3 | ||||
-rw-r--r-- | runtime/gc/space/space_test.h | 2 |
13 files changed, 30 insertions, 26 deletions
diff --git a/runtime/gc/accounting/card_table.h b/runtime/gc/accounting/card_table.h index bb4d1d7..8b7bfd3 100644 --- a/runtime/gc/accounting/card_table.h +++ b/runtime/gc/accounting/card_table.h @@ -17,8 +17,8 @@ #ifndef ART_RUNTIME_GC_ACCOUNTING_CARD_TABLE_H_ #define ART_RUNTIME_GC_ACCOUNTING_CARD_TABLE_H_ +#include "base/mutex.h" #include "globals.h" -#include "locks.h" #include "mem_map.h" #include "UniquePtr.h" diff --git a/runtime/gc/accounting/heap_bitmap.h b/runtime/gc/accounting/heap_bitmap.h index dde1425..7cfeb63 100644 --- a/runtime/gc/accounting/heap_bitmap.h +++ b/runtime/gc/accounting/heap_bitmap.h @@ -19,7 +19,6 @@ #include "base/logging.h" #include "gc_allocator.h" -#include "locks.h" #include "object_callbacks.h" #include "space_bitmap.h" diff --git a/runtime/gc/accounting/mod_union_table.cc b/runtime/gc/accounting/mod_union_table.cc index 06127c1..8871921 100644 --- a/runtime/gc/accounting/mod_union_table.cc +++ b/runtime/gc/accounting/mod_union_table.cc @@ -175,7 +175,6 @@ class CheckReferenceVisitor { } // Extra parameters are required since we use this same visitor signature for checking objects. - // TODO: Fixme when anotatalysis works with visitors. void operator()(Object* obj, Object* ref, const MemberOffset& /* offset */, bool /* is_static */) const SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_, Locks::mutator_lock_) { diff --git a/runtime/gc/accounting/space_bitmap.h b/runtime/gc/accounting/space_bitmap.h index 3c4b674..5fd2bce 100644 --- a/runtime/gc/accounting/space_bitmap.h +++ b/runtime/gc/accounting/space_bitmap.h @@ -17,9 +17,9 @@ #ifndef ART_RUNTIME_GC_ACCOUNTING_SPACE_BITMAP_H_ #define ART_RUNTIME_GC_ACCOUNTING_SPACE_BITMAP_H_ +#include "base/mutex.h" #include "gc_allocator.h" #include "globals.h" -#include "locks.h" #include "mem_map.h" #include "object_callbacks.h" #include "UniquePtr.h" @@ -248,8 +248,7 @@ class ObjectSet { contained_ = space_set.contained_; } - void Walk(ObjectCallback* callback, void* arg) - SHARED_LOCKS_REQUIRED(GlobalSynchronization::heap_bitmap_lock_); + void Walk(ObjectCallback* callback, void* arg) SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); template <typename Visitor> void Visit(const Visitor& visitor) NO_THREAD_SAFETY_ANALYSIS { diff --git a/runtime/gc/collector/garbage_collector.h b/runtime/gc/collector/garbage_collector.h index 088f1d4..8d401b8 100644 --- a/runtime/gc/collector/garbage_collector.h +++ b/runtime/gc/collector/garbage_collector.h @@ -18,10 +18,10 @@ #define ART_RUNTIME_GC_COLLECTOR_GARBAGE_COLLECTOR_H_ #include "base/histogram.h" +#include "base/mutex.h" #include "base/timing_logger.h" #include "gc/gc_cause.h" #include "gc_type.h" -#include "locks.h" #include <stdint.h> #include <vector> diff --git a/runtime/gc/collector/mark_sweep.h b/runtime/gc/collector/mark_sweep.h index 5c0a233..8d40c34 100644 --- a/runtime/gc/collector/mark_sweep.h +++ b/runtime/gc/collector/mark_sweep.h @@ -114,7 +114,7 @@ class MarkSweep : public GarbageCollector { EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); - bool IsImmuneSpace(const space::ContinuousSpace* space) const; + bool IsImmuneSpace(const space::ContinuousSpace* space) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); // Bind the live bits to the mark bits of bitmaps for spaces that are never collected, ie @@ -152,6 +152,7 @@ class MarkSweep : public GarbageCollector { // Sweep only pointers within an array. WARNING: Trashes objects. void SweepArray(accounting::ObjectStack* allocation_stack_, bool swap_bitmaps) + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); // Blackens an object. diff --git a/runtime/gc/collector/partial_mark_sweep.h b/runtime/gc/collector/partial_mark_sweep.h index 44ae9e9..ac0d068 100644 --- a/runtime/gc/collector/partial_mark_sweep.h +++ b/runtime/gc/collector/partial_mark_sweep.h @@ -17,7 +17,6 @@ #ifndef ART_RUNTIME_GC_COLLECTOR_PARTIAL_MARK_SWEEP_H_ #define ART_RUNTIME_GC_COLLECTOR_PARTIAL_MARK_SWEEP_H_ -#include "locks.h" #include "mark_sweep.h" namespace art { diff --git a/runtime/gc/collector/semi_space.cc b/runtime/gc/collector/semi_space.cc index a577f90..2da360f 100644 --- a/runtime/gc/collector/semi_space.cc +++ b/runtime/gc/collector/semi_space.cc @@ -678,13 +678,14 @@ void SemiSpace::DelayReferenceReferent(mirror::Class* klass, Object* obj) { heap_->DelayReferenceReferent(klass, obj, MarkedForwardingAddressCallback, this); } -// Visit all of the references of an object and update. -void SemiSpace::ScanObject(Object* obj) { - DCHECK(obj != NULL); - DCHECK(!from_space_->HasAddress(obj)) << "Scanning object " << obj << " in from space"; - MarkSweep::VisitObjectReferences(obj, [this](Object* obj, Object* ref, const MemberOffset& offset, - bool /* is_static */) ALWAYS_INLINE_LAMBDA NO_THREAD_SAFETY_ANALYSIS { - mirror::Object* new_address = MarkObject(ref); +class SemiSpaceMarkObjectVisitor { + public: + explicit SemiSpaceMarkObjectVisitor(SemiSpace* semi_space) : semi_space_(semi_space) { + } + + void operator()(Object* obj, Object* ref, const MemberOffset& offset, bool /* is_static */) + const ALWAYS_INLINE NO_THREAD_SAFETY_ANALYSIS /* EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_, Locks::mutator_lock_) */ { + mirror::Object* new_address = semi_space_->MarkObject(ref); if (new_address != ref) { DCHECK(new_address != nullptr); // Don't need to mark the card since we updating the object address and not changing the @@ -694,7 +695,17 @@ void SemiSpace::ScanObject(Object* obj) { // disable check as we could run inside a transaction. obj->SetFieldObjectWithoutWriteBarrier<false, false, kVerifyNone>(offset, new_address, false); } - }, kMovingClasses); + } + private: + SemiSpace* const semi_space_; +}; + +// Visit all of the references of an object and update. +void SemiSpace::ScanObject(Object* obj) { + DCHECK(obj != NULL); + DCHECK(!from_space_->HasAddress(obj)) << "Scanning object " << obj << " in from space"; + SemiSpaceMarkObjectVisitor visitor(this); + MarkSweep::VisitObjectReferences(obj, visitor, kMovingClasses); mirror::Class* klass = obj->GetClass<kVerifyNone>(); if (UNLIKELY(klass->IsReferenceClass<kVerifyNone>())) { DelayReferenceReferent(klass, obj); diff --git a/runtime/gc/collector/sticky_mark_sweep.h b/runtime/gc/collector/sticky_mark_sweep.h index 98f2b59..934b1bd 100644 --- a/runtime/gc/collector/sticky_mark_sweep.h +++ b/runtime/gc/collector/sticky_mark_sweep.h @@ -18,7 +18,6 @@ #define ART_RUNTIME_GC_COLLECTOR_STICKY_MARK_SWEEP_H_ #include "base/macros.h" -#include "locks.h" #include "partial_mark_sweep.h" namespace art { @@ -43,7 +42,9 @@ class StickyMarkSweep FINAL : public PartialMarkSweep { SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); - void Sweep(bool swap_bitmaps) OVERRIDE EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); + void Sweep(bool swap_bitmaps) OVERRIDE + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) + EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); // Don't need to do anything special here since we scan all the cards which may have references // to the newly allocated objects. diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h index e5c8ff1..4c4e943 100644 --- a/runtime/gc/heap.h +++ b/runtime/gc/heap.h @@ -31,7 +31,6 @@ #include "globals.h" #include "gtest/gtest.h" #include "jni.h" -#include "locks.h" #include "object_callbacks.h" #include "offsets.h" #include "reference_queue.h" @@ -684,7 +683,7 @@ class Heap { void RemoveSpace(space::Space* space) LOCKS_EXCLUDED(Locks::heap_bitmap_lock_); static void VerificationCallback(mirror::Object* obj, void* arg) - SHARED_LOCKS_REQUIRED(GlobalSychronization::heap_bitmap_lock_); + SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_); // Swap the allocation stack with the live stack. void SwapStacks(Thread* self); diff --git a/runtime/gc/reference_queue.h b/runtime/gc/reference_queue.h index e12a95f..99314ba 100644 --- a/runtime/gc/reference_queue.h +++ b/runtime/gc/reference_queue.h @@ -26,7 +26,6 @@ #include "globals.h" #include "gtest/gtest.h" #include "jni.h" -#include "locks.h" #include "object_callbacks.h" #include "offsets.h" #include "thread_pool.h" diff --git a/runtime/gc/space/bump_pointer_space.h b/runtime/gc/space/bump_pointer_space.h index 2c9d35f..031fccd 100644 --- a/runtime/gc/space/bump_pointer_space.h +++ b/runtime/gc/space/bump_pointer_space.h @@ -146,9 +146,6 @@ class BumpPointerSpace FINAL : public ContinuousMemMapAllocSpace { byte* AllocBlock(size_t bytes) EXCLUSIVE_LOCKS_REQUIRED(block_lock_); void RevokeThreadLocalBuffersLocked(Thread* thread) EXCLUSIVE_LOCKS_REQUIRED(block_lock_); - mirror::Object* AllocWithoutGrowthLocked(size_t num_bytes, size_t* bytes_allocated) - EXCLUSIVE_LOCKS_REQUIRED(lock_); - // The main block is an unbounded block where objects go when there are no other blocks. This // enables us to maintain tightly packed objects when you are not using thread local buffers for // allocation. The main block starts at the space Begin(). diff --git a/runtime/gc/space/space_test.h b/runtime/gc/space/space_test.h index 413fc1d..ea0d290 100644 --- a/runtime/gc/space/space_test.h +++ b/runtime/gc/space/space_test.h @@ -75,7 +75,7 @@ class SpaceTest : public CommonRuntimeTest { void SizeFootPrintGrowthLimitAndTrimDriver(size_t object_size, CreateSpaceFn create_space); }; -static size_t test_rand(size_t* seed) { +static inline size_t test_rand(size_t* seed) { *seed = *seed * 1103515245 + 12345; return *seed; } |