< prev index next >

src/hotspot/share/gc/g1/g1CollectedHeap.cpp

Print this page
rev 58082 : 8214535: Parallel heap inspection for jmap histo (G1)
Summary: Add parallel heap inspection to speedup jmap -histo, this patch support G1
Reviewed-by:
Contributed-by: lzang


  69 #include "gc/shared/gcBehaviours.hpp"
  70 #include "gc/shared/gcHeapSummary.hpp"
  71 #include "gc/shared/gcId.hpp"
  72 #include "gc/shared/gcLocker.hpp"
  73 #include "gc/shared/gcTimer.hpp"
  74 #include "gc/shared/gcTraceTime.inline.hpp"
  75 #include "gc/shared/generationSpec.hpp"
  76 #include "gc/shared/isGCActiveMark.hpp"
  77 #include "gc/shared/locationPrinter.inline.hpp"
  78 #include "gc/shared/oopStorageParState.hpp"
  79 #include "gc/shared/preservedMarks.inline.hpp"
  80 #include "gc/shared/suspendibleThreadSet.hpp"
  81 #include "gc/shared/referenceProcessor.inline.hpp"
  82 #include "gc/shared/taskTerminator.hpp"
  83 #include "gc/shared/taskqueue.inline.hpp"
  84 #include "gc/shared/weakProcessor.inline.hpp"
  85 #include "gc/shared/workerPolicy.hpp"
  86 #include "logging/log.hpp"
  87 #include "memory/allocation.hpp"
  88 #include "memory/iterator.hpp"

  89 #include "memory/resourceArea.hpp"
  90 #include "memory/universe.hpp"
  91 #include "oops/access.inline.hpp"
  92 #include "oops/compressedOops.inline.hpp"
  93 #include "oops/oop.inline.hpp"
  94 #include "runtime/atomic.hpp"
  95 #include "runtime/flags/flagSetting.hpp"
  96 #include "runtime/handles.inline.hpp"
  97 #include "runtime/init.hpp"
  98 #include "runtime/orderAccess.hpp"
  99 #include "runtime/threadSMR.hpp"
 100 #include "runtime/vmThread.hpp"
 101 #include "utilities/align.hpp"
 102 #include "utilities/bitMap.inline.hpp"
 103 #include "utilities/globalDefinitions.hpp"
 104 #include "utilities/stack.inline.hpp"
 105 
 106 size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0;
 107 
 108 // INVARIANTS/NOTES


4967 void G1CollectedHeap::rebuild_strong_code_roots() {
4968   RebuildStrongCodeRootClosure blob_cl(this);
4969   CodeCache::blobs_do(&blob_cl);
4970 }
4971 
4972 void G1CollectedHeap::initialize_serviceability() {
4973   _g1mm->initialize_serviceability();
4974 }
4975 
4976 MemoryUsage G1CollectedHeap::memory_usage() {
4977   return _g1mm->memory_usage();
4978 }
4979 
4980 GrowableArray<GCMemoryManager*> G1CollectedHeap::memory_managers() {
4981   return _g1mm->memory_managers();
4982 }
4983 
4984 GrowableArray<MemoryPool*> G1CollectedHeap::memory_pools() {
4985   return _g1mm->memory_pools();
4986 }







































  69 #include "gc/shared/gcBehaviours.hpp"
  70 #include "gc/shared/gcHeapSummary.hpp"
  71 #include "gc/shared/gcId.hpp"
  72 #include "gc/shared/gcLocker.hpp"
  73 #include "gc/shared/gcTimer.hpp"
  74 #include "gc/shared/gcTraceTime.inline.hpp"
  75 #include "gc/shared/generationSpec.hpp"
  76 #include "gc/shared/isGCActiveMark.hpp"
  77 #include "gc/shared/locationPrinter.inline.hpp"
  78 #include "gc/shared/oopStorageParState.hpp"
  79 #include "gc/shared/preservedMarks.inline.hpp"
  80 #include "gc/shared/suspendibleThreadSet.hpp"
  81 #include "gc/shared/referenceProcessor.inline.hpp"
  82 #include "gc/shared/taskTerminator.hpp"
  83 #include "gc/shared/taskqueue.inline.hpp"
  84 #include "gc/shared/weakProcessor.inline.hpp"
  85 #include "gc/shared/workerPolicy.hpp"
  86 #include "logging/log.hpp"
  87 #include "memory/allocation.hpp"
  88 #include "memory/iterator.hpp"
  89 #include "memory/heapInspection.hpp"
  90 #include "memory/resourceArea.hpp"
  91 #include "memory/universe.hpp"
  92 #include "oops/access.inline.hpp"
  93 #include "oops/compressedOops.inline.hpp"
  94 #include "oops/oop.inline.hpp"
  95 #include "runtime/atomic.hpp"
  96 #include "runtime/flags/flagSetting.hpp"
  97 #include "runtime/handles.inline.hpp"
  98 #include "runtime/init.hpp"
  99 #include "runtime/orderAccess.hpp"
 100 #include "runtime/threadSMR.hpp"
 101 #include "runtime/vmThread.hpp"
 102 #include "utilities/align.hpp"
 103 #include "utilities/bitMap.inline.hpp"
 104 #include "utilities/globalDefinitions.hpp"
 105 #include "utilities/stack.inline.hpp"
 106 
 107 size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0;
 108 
 109 // INVARIANTS/NOTES


4968 void G1CollectedHeap::rebuild_strong_code_roots() {
4969   RebuildStrongCodeRootClosure blob_cl(this);
4970   CodeCache::blobs_do(&blob_cl);
4971 }
4972 
4973 void G1CollectedHeap::initialize_serviceability() {
4974   _g1mm->initialize_serviceability();
4975 }
4976 
4977 MemoryUsage G1CollectedHeap::memory_usage() {
4978   return _g1mm->memory_usage();
4979 }
4980 
4981 GrowableArray<GCMemoryManager*> G1CollectedHeap::memory_managers() {
4982   return _g1mm->memory_managers();
4983 }
4984 
4985 GrowableArray<MemoryPool*> G1CollectedHeap::memory_pools() {
4986   return _g1mm->memory_pools();
4987 }
4988 
4989 class G1ParHeapInspectTask: public ParHeapInspectTask {
4990  private:
4991   HeapRegionClaimer _claimer;
4992  public:
4993   G1ParHeapInspectTask(G1CollectedHeap* heap, KlassInfoTable* shared_cit,
4994                      BoolObjectClosure* filter, size_t* shared_missed_count,
4995                      size_t thread_num) :
4996       ParHeapInspectTask(heap, shared_cit, filter, shared_missed_count, thread_num),
4997       _claimer(thread_num == 0 ? heap->workers()->active_workers() : thread_num) { }
4998   void do_object_iterate_parallel(ObjectClosure* cl, uint worker_id) {
4999     ((G1CollectedHeap*)getHeap())->object_iterate_parallel(cl, worker_id, &_claimer);
5000   }
5001 };
5002 
5003 bool G1CollectedHeap::run_par_heap_inspect_task(KlassInfoTable* cit,
5004                                                    BoolObjectClosure* filter,
5005                                                    size_t* missed_count, size_t thread_num) {
5006   G1ParHeapInspectTask task(this, cit, filter, missed_count, thread_num);
5007   return object_iterate_try_parallel(&task, thread_num) && task.is_success();
5008 }
5009 
5010 void G1CollectedHeap::object_iterate_parallel(ObjectClosure* cl, uint worker_id, HeapRegionClaimer* claimer) {
5011   IterateObjectClosureRegionClosure blk(cl);
5012   heap_region_par_iterate_from_worker_offset(&blk, claimer, worker_id);
5013 }
5014 
5015 bool G1CollectedHeap::object_iterate_try_parallel(AbstractGangTask* task, size_t par_thread_num) {
5016   if (task == NULL) {
5017     return false;
5018   }
5019   par_thread_num = MIN2((uint)par_thread_num, workers()->total_workers());
5020   workers()->run_task(task, par_thread_num);
5021   return true;
5022 }
5023 
5024 
< prev index next >