src/hotspot/share/gc/shared/weakProcessor.cpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 54511 fbfcebad8e66
child 58679 9c3209ff7550
--- a/src/hotspot/share/gc/shared/weakProcessor.cpp	Thu Oct 17 20:27:44 2019 +0100
+++ b/src/hotspot/share/gc/shared/weakProcessor.cpp	Thu Oct 17 20:53:35 2019 +0100
@@ -26,6 +26,7 @@
 #include "classfile/stringTable.hpp"
 #include "gc/shared/oopStorage.inline.hpp"
 #include "gc/shared/oopStorageParState.inline.hpp"
+#include "gc/shared/oopStorageSet.hpp"
 #include "gc/shared/weakProcessor.inline.hpp"
 #include "gc/shared/weakProcessorPhases.hpp"
 #include "gc/shared/weakProcessorPhaseTimes.hpp"
@@ -38,11 +39,11 @@
 template <typename Container>
 class OopsDoAndReportCounts {
 public:
-  void operator()(BoolObjectClosure* is_alive, OopClosure* keep_alive, WeakProcessorPhase phase) {
+  void operator()(BoolObjectClosure* is_alive, OopClosure* keep_alive, OopStorage* storage) {
     Container::reset_dead_counter();
 
     CountingSkippedIsAliveClosure<BoolObjectClosure, OopClosure> cl(is_alive, keep_alive);
-    WeakProcessorPhases::oop_storage(phase)->oops_do(&cl);
+    storage->oops_do(&cl);
 
     Container::inc_dead_counter(cl.num_dead() + cl.num_skipped());
     Container::finish_dead_counter();
@@ -50,17 +51,19 @@
 };
 
 void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) {
-  FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
-    if (WeakProcessorPhases::is_serial(phase)) {
-      WeakProcessorPhases::processor(phase)(is_alive, keep_alive);
+  WeakProcessorPhases::Iterator pit = WeakProcessorPhases::serial_iterator();
+  for ( ; !pit.is_end(); ++pit) {
+    WeakProcessorPhases::processor(*pit)(is_alive, keep_alive);
+  }
+
+  OopStorageSet::Iterator it = OopStorageSet::weak_iterator();
+  for ( ; !it.is_end(); ++it) {
+    if (OopStorageSet::string_table_weak() == *it) {
+      OopsDoAndReportCounts<StringTable>()(is_alive, keep_alive, *it);
+    } else if (OopStorageSet::resolved_method_table_weak() == *it) {
+      OopsDoAndReportCounts<ResolvedMethodTable>()(is_alive, keep_alive, *it);
     } else {
-      if (WeakProcessorPhases::is_stringtable(phase)) {
-        OopsDoAndReportCounts<StringTable>()(is_alive, keep_alive, phase);
-      } else if (WeakProcessorPhases::is_resolved_method_table(phase)){
-        OopsDoAndReportCounts<ResolvedMethodTable>()(is_alive, keep_alive, phase);
-      } else {
-        WeakProcessorPhases::oop_storage(phase)->weak_oops_do(is_alive, keep_alive);
-      }
+      it->weak_oops_do(is_alive, keep_alive);
     }
   }
 }
@@ -86,8 +89,9 @@
   // and development oriented, so not allocating any threads
   // specifically for them is okay.
   size_t ref_count = 0;
-  FOR_EACH_WEAK_PROCESSOR_OOP_STORAGE_PHASE(phase) {
-    ref_count += WeakProcessorPhases::oop_storage(phase)->allocation_count();
+  OopStorageSet::Iterator it = OopStorageSet::weak_iterator();
+  for ( ; !it.is_end(); ++it) {
+    ref_count += it->allocation_count();
   }
 
   // +1 to (approx) round up the ref per thread division.
@@ -106,14 +110,16 @@
     _phase_times->set_active_workers(_nworkers);
   }
 
-  uint storage_count = WeakProcessorPhases::oop_storage_phase_count;
+  uint storage_count = WeakProcessorPhases::oopstorage_phase_count;
   _storage_states = NEW_C_HEAP_ARRAY(StorageState, storage_count, mtGC);
 
-  StorageState* states = _storage_states;
-  FOR_EACH_WEAK_PROCESSOR_OOP_STORAGE_PHASE(phase) {
-    OopStorage* storage = WeakProcessorPhases::oop_storage(phase);
-    new (states++) StorageState(storage, _nworkers);
+  StorageState* cur_state = _storage_states;
+  OopStorageSet::Iterator it = OopStorageSet::weak_iterator();
+  for ( ; !it.is_end(); ++it, ++cur_state) {
+    assert(pointer_delta(cur_state, _storage_states, sizeof(StorageState)) < storage_count, "invariant");
+    new (cur_state) StorageState(*it, _nworkers);
   }
+  assert(pointer_delta(cur_state, _storage_states, sizeof(StorageState)) == storage_count, "invariant");
   StringTable::reset_dead_counter();
   ResolvedMethodTable::reset_dead_counter();
 }
@@ -139,7 +145,7 @@
 WeakProcessor::Task::~Task() {
   if (_storage_states != NULL) {
     StorageState* states = _storage_states;
-    FOR_EACH_WEAK_PROCESSOR_OOP_STORAGE_PHASE(phase) {
+    for (uint i = 0; i < WeakProcessorPhases::oopstorage_phase_count; ++i) {
       states->StorageState::~StorageState();
       ++states;
     }