summaryrefslogtreecommitdiffstats
path: root/runtime/gc/collector/mark_sweep.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-05-02 16:35:37 -0700
committerMathieu Chartier <mathieuc@google.com>2014-05-05 16:59:01 -0700
commite76e70f424468f311c2061c291e8384263f3968c (patch)
treeace430e6682214221feb4101a5b598463f6e0947 /runtime/gc/collector/mark_sweep.cc
parent0b8027003514c4fa6a850e5087076e991daaf4c3 (diff)
downloadart-e76e70f424468f311c2061c291e8384263f3968c.tar.gz
art-e76e70f424468f311c2061c291e8384263f3968c.tar.bz2
art-e76e70f424468f311c2061c291e8384263f3968c.zip
Add RecordFree to the GarbageCollector interface
RecordFree now calls the Heap::RecordFree as well as updates the garbage collector's internal bytes freed accounting. Change-Id: I8cb03748b0768e3c8c50ea709572960e6e4ad219
Diffstat (limited to 'runtime/gc/collector/mark_sweep.cc')
-rw-r--r--runtime/gc/collector/mark_sweep.cc19
1 files changed, 6 insertions, 13 deletions
diff --git a/runtime/gc/collector/mark_sweep.cc b/runtime/gc/collector/mark_sweep.cc
index e225d5a569..b8051c9b38 100644
--- a/runtime/gc/collector/mark_sweep.cc
+++ b/runtime/gc/collector/mark_sweep.cc
@@ -1116,13 +1116,10 @@ void MarkSweep::SweepArray(accounting::ObjectStack* allocations, bool swap_bitma
timings_.EndSplit();
timings_.StartSplit("RecordFree");
- VLOG(heap) << "Freed " << freed_objects << "/" << count
- << " objects with size " << PrettySize(freed_bytes);
- heap_->RecordFree(freed_objects + freed_large_objects, freed_bytes + freed_large_object_bytes);
- freed_objects_.FetchAndAdd(freed_objects);
- freed_large_objects_.FetchAndAdd(freed_large_objects);
- freed_bytes_.FetchAndAdd(freed_bytes);
- freed_large_object_bytes_.FetchAndAdd(freed_large_object_bytes);
+ VLOG(heap) << "Freed " << freed_objects << "/" << count << " objects with size "
+ << PrettySize(freed_bytes);
+ RecordFree(freed_objects, freed_bytes);
+ RecordFreeLargeObjects(freed_large_objects, freed_large_object_bytes);
timings_.EndSplit();
timings_.StartSplit("ResetStack");
@@ -1150,9 +1147,7 @@ void MarkSweep::Sweep(bool swap_bitmaps) {
size_t freed_objects = 0;
size_t freed_bytes = 0;
alloc_space->Sweep(swap_bitmaps, &freed_objects, &freed_bytes);
- heap_->RecordFree(freed_objects, freed_bytes);
- freed_objects_.FetchAndAdd(freed_objects);
- freed_bytes_.FetchAndAdd(freed_bytes);
+ RecordFree(freed_objects, freed_bytes);
}
}
SweepLargeObjects(swap_bitmaps);
@@ -1163,9 +1158,7 @@ void MarkSweep::SweepLargeObjects(bool swap_bitmaps) {
size_t freed_objects = 0;
size_t freed_bytes = 0;
heap_->GetLargeObjectsSpace()->Sweep(swap_bitmaps, &freed_objects, &freed_bytes);
- freed_large_objects_.FetchAndAdd(freed_objects);
- freed_large_object_bytes_.FetchAndAdd(freed_bytes);
- heap_->RecordFree(freed_objects, freed_bytes);
+ RecordFreeLargeObjects(freed_objects, freed_bytes);
}
// Process the "referent" field in a java.lang.ref.Reference. If the referent has not yet been