Quicker partial collection by using card marking.
Add calls to the card marking from the write barrier routines, so that
a write to an Object marks the appropriate card. Add code in the GC to
use and rebuild the cards at a partial GC, clearing cards in the
Zygote heap which do not in fact contain references to the application
heap.
Change-Id: Ie6f29fd096e029f48085715b282b6db8a7122555
diff --git a/vm/alloc/WriteBarrier.h b/vm/alloc/WriteBarrier.h
index fef993e..34b3b19 100644
--- a/vm/alloc/WriteBarrier.h
+++ b/vm/alloc/WriteBarrier.h
@@ -23,13 +23,17 @@
/*
* The address within the Object has been written, and perhaps changed.
*/
-INLINE void dvmWriteBarrierField(const Object *obj, void *addr) {
+INLINE void dvmWriteBarrierField(const Object *obj, void *addr)
+{
+ dvmMarkCard(obj);
}
/*
* All of the Object may have changed.
*/
-INLINE void dvmWriteBarrierObject(const Object *obj) {
+INLINE void dvmWriteBarrierObject(const Object *obj)
+{
+ dvmMarkCard(obj);
}
/*
@@ -37,6 +41,8 @@
* or equal to start and strictly less than end, have been written,
* and perhaps changed.
*/
-INLINE void dvmWriteBarrierArray(const ArrayObject* obj,
- size_t start, size_t end) {
+INLINE void dvmWriteBarrierArray(const ArrayObject *obj,
+ size_t start, size_t end)
+{
+ dvmMarkCard((Object *)obj);
}