< prev index next >

src/share/vm/services/memoryService.cpp

Print this page

        

@@ -44,18 +44,20 @@
 #include "services/memoryPool.hpp"
 #include "services/memoryService.hpp"
 #include "utilities/growableArray.hpp"
 #include "utilities/macros.hpp"
 #if INCLUDE_ALL_GCS
+#include "gc/shenandoah/shenandoahHeap.hpp"
 #include "gc/cms/concurrentMarkSweepGeneration.hpp"
 #include "gc/cms/parNewGeneration.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
 #include "gc/parallel/parallelScavengeHeap.hpp"
 #include "gc/parallel/psOldGen.hpp"
 #include "gc/parallel/psYoungGen.hpp"
 #include "services/g1MemoryPool.hpp"
 #include "services/psMemoryPool.hpp"
+#include "services/shenandoahMemoryPool.hpp"
 #endif // INCLUDE_ALL_GCS
 
 GrowableArray<MemoryPool*>* MemoryService::_pools_list =
   new (ResourceObj::C_HEAP, mtInternal) GrowableArray<MemoryPool*>(init_pools_list_size, true);
 GrowableArray<MemoryManager*>* MemoryService::_managers_list =

@@ -96,10 +98,14 @@
     }
     case CollectedHeap::G1CollectedHeap : {
       add_g1_heap_info(G1CollectedHeap::heap());
       break;
     }
+  case CollectedHeap::ShenandoahHeap : {
+    add_shenandoah_heap_info(ShenandoahHeap::heap());
+    break;
+  }
 #endif // INCLUDE_ALL_GCS
     default: {
       guarantee(false, "Unrecognized kind of heap");
     }
   }

@@ -113,12 +119,16 @@
     _major_gc_manager->set_num_gc_threads(count);
   }
 
   // All memory pools and memory managers are initialized.
   //
+  if (UseShenandoahGC) {
+    _major_gc_manager->initialize_gc_stat_info();
+  } else {
   _minor_gc_manager->initialize_gc_stat_info();
   _major_gc_manager->initialize_gc_stat_info();
+  }
 }
 
 // Add memory pools for GenCollectedHeap
 // This function currently only supports two generations collected heap.
 // The collector for GenCollectedHeap will have two memory managers.

@@ -185,10 +195,19 @@
   _managers_list->append(_major_gc_manager);
 
   add_g1YoungGen_memory_pool(g1h, _major_gc_manager, _minor_gc_manager);
   add_g1OldGen_memory_pool(g1h, _major_gc_manager);
 }
+
+void MemoryService::add_shenandoah_heap_info(ShenandoahHeap* pgch) {
+  assert(UseShenandoahGC, "sanity");
+  _major_gc_manager = MemoryManager::get_shenandoah_memory_manager();
+  _minor_gc_manager = MemoryManager::get_shenandoah_memory_manager();
+  _managers_list->append(_major_gc_manager);
+  add_shenandoah_memory_pool(pgch, _major_gc_manager);
+}
+
 #endif // INCLUDE_ALL_GCS
 
 MemoryPool* MemoryService::add_gen(Generation* gen,
                                    const char* name,
                                    bool is_heap,

@@ -383,10 +402,23 @@
 
   G1OldGenPool* old_gen = new G1OldGenPool(g1h);
   mgr->add_pool(old_gen);
   _pools_list->append(old_gen);
 }
+
+void MemoryService::add_shenandoah_memory_pool(ShenandoahHeap* pgc,
+                                               MemoryManager* mgr) {
+  ShenandoahMemoryPool* pool = new ShenandoahMemoryPool(pgc,
+                                                        "Shenandoah",
+                                                        MemoryPool::Heap,
+                                                        false /* support_usage_threshold */);
+
+  mgr->add_pool(pool);
+  _pools_list->append(pool);
+}
+
+
 #endif // INCLUDE_ALL_GCS
 
 void MemoryService::add_code_heap_memory_pool(CodeHeap* heap, const char* name) {
   // Create new memory pool for this heap
   MemoryPool* code_heap_pool = new CodeHeapPool(heap, name, true /* support_usage_threshold */);
< prev index next >