Sweep the monitor list.

Change-Id: I343261206f8bbabd245b404dd95d532255e5d870
diff --git a/src/mark_sweep.cc b/src/mark_sweep.cc
index 05f229d..79597ec 100644
--- a/src/mark_sweep.cc
+++ b/src/mark_sweep.cc
@@ -13,6 +13,7 @@
 #include "logging.h"
 #include "macros.h"
 #include "mark_stack.h"
+#include "monitor.h"
 #include "object.h"
 #include "runtime.h"
 #include "space.h"
@@ -125,24 +126,9 @@
   }
 }
 
-struct InternTableEntryIsUnmarked : public InternTable::Predicate {
-  InternTableEntryIsUnmarked(MarkSweep* ms) : ms_(ms) { }
-
-  bool operator()(const String* s) const {
-    return !ms_->IsMarked(s);
-  }
-
-  MarkSweep* ms_;
-};
-
-void MarkSweep::SweepMonitorList() {
-  UNIMPLEMENTED(WARNING);
-  //dvmSweepMonitorList(&gDvm.monitorList, isUnmarkedObject);
-}
-
 void MarkSweep::SweepSystemWeaks() {
-  Runtime::Current()->GetInternTable()->RemoveWeakIf(InternTableEntryIsUnmarked(this));
-  SweepMonitorList();
+  Runtime::Current()->GetInternTable()->SweepInternTableWeaks(IsMarked, this);
+  Runtime::Current()->GetMonitorList()->SweepMonitorList(IsMarked, this);
   SweepJniWeakGlobals();
 }