< prev index next >

src/hotspot/share/gc/parallel/psMarkSweep.cpp

Print this page
rev 47223 : [mq]: heapz8


  33 #include "gc/parallel/psMarkSweep.hpp"
  34 #include "gc/parallel/psMarkSweepDecorator.hpp"
  35 #include "gc/parallel/psOldGen.hpp"
  36 #include "gc/parallel/psScavenge.hpp"
  37 #include "gc/parallel/psYoungGen.hpp"
  38 #include "gc/serial/markSweep.hpp"
  39 #include "gc/shared/gcCause.hpp"
  40 #include "gc/shared/gcHeapSummary.hpp"
  41 #include "gc/shared/gcId.hpp"
  42 #include "gc/shared/gcLocker.inline.hpp"
  43 #include "gc/shared/gcTimer.hpp"
  44 #include "gc/shared/gcTrace.hpp"
  45 #include "gc/shared/gcTraceTime.inline.hpp"
  46 #include "gc/shared/isGCActiveMark.hpp"
  47 #include "gc/shared/referencePolicy.hpp"
  48 #include "gc/shared/referenceProcessor.hpp"
  49 #include "gc/shared/spaceDecorator.hpp"
  50 #include "logging/log.hpp"
  51 #include "oops/oop.inline.hpp"
  52 #include "runtime/biasedLocking.hpp"

  53 #include "runtime/safepoint.hpp"
  54 #include "runtime/vmThread.hpp"
  55 #include "services/management.hpp"
  56 #include "services/memoryService.hpp"
  57 #include "utilities/align.hpp"
  58 #include "utilities/events.hpp"
  59 #include "utilities/stack.inline.hpp"
  60 
  61 elapsedTimer        PSMarkSweep::_accumulated_time;
  62 jlong               PSMarkSweep::_time_of_last_gc   = 0;
  63 CollectorCounters*  PSMarkSweep::_counters = NULL;
  64 
  65 void PSMarkSweep::initialize() {
  66   MemRegion mr = ParallelScavengeHeap::heap()->reserved_region();
  67   set_ref_processor(new ReferenceProcessor(mr));     // a vanilla ref proc
  68   _counters = new CollectorCounters("PSMarkSweep", 1);
  69 }
  70 
  71 // This method contains all heap specific policy for invoking mark sweep.
  72 // PSMarkSweep::invoke_no_policy() will only attempt to mark-sweep-compact


 597   PSYoungGen* young_gen = heap->young_gen();
 598   PSOldGen* old_gen = heap->old_gen();
 599 
 600   // Need to clear claim bits before the tracing starts.
 601   ClassLoaderDataGraph::clear_claimed_marks();
 602 
 603   // General strong roots.
 604   Universe::oops_do(adjust_pointer_closure());
 605   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 606   Threads::oops_do(adjust_pointer_closure(), NULL);
 607   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 608   Management::oops_do(adjust_pointer_closure());
 609   JvmtiExport::oops_do(adjust_pointer_closure());
 610   SystemDictionary::oops_do(adjust_pointer_closure());
 611   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
 612 
 613   // Now adjust pointers in remaining weak roots.  (All of which should
 614   // have been cleared if they pointed to non-surviving objects.)
 615   // Global (weak) JNI handles
 616   JNIHandles::weak_oops_do(adjust_pointer_closure());

 617 
 618   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 619   CodeCache::blobs_do(&adjust_from_blobs);
 620   AOTLoader::oops_do(adjust_pointer_closure());
 621   StringTable::oops_do(adjust_pointer_closure());
 622   ref_processor()->weak_oops_do(adjust_pointer_closure());
 623   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 624 
 625   adjust_marks();
 626 
 627   young_gen->adjust_pointers();
 628   old_gen->adjust_pointers();
 629 }
 630 
 631 void PSMarkSweep::mark_sweep_phase4() {
 632   EventMark m("4 compact heap");
 633   GCTraceTime(Info, gc, phases) tm("Phase 4: Move objects", _gc_timer);
 634 
 635   // All pointers are now adjusted, move objects accordingly
 636 




  33 #include "gc/parallel/psMarkSweep.hpp"
  34 #include "gc/parallel/psMarkSweepDecorator.hpp"
  35 #include "gc/parallel/psOldGen.hpp"
  36 #include "gc/parallel/psScavenge.hpp"
  37 #include "gc/parallel/psYoungGen.hpp"
  38 #include "gc/serial/markSweep.hpp"
  39 #include "gc/shared/gcCause.hpp"
  40 #include "gc/shared/gcHeapSummary.hpp"
  41 #include "gc/shared/gcId.hpp"
  42 #include "gc/shared/gcLocker.inline.hpp"
  43 #include "gc/shared/gcTimer.hpp"
  44 #include "gc/shared/gcTrace.hpp"
  45 #include "gc/shared/gcTraceTime.inline.hpp"
  46 #include "gc/shared/isGCActiveMark.hpp"
  47 #include "gc/shared/referencePolicy.hpp"
  48 #include "gc/shared/referenceProcessor.hpp"
  49 #include "gc/shared/spaceDecorator.hpp"
  50 #include "logging/log.hpp"
  51 #include "oops/oop.inline.hpp"
  52 #include "runtime/biasedLocking.hpp"
  53 #include "runtime/heapMonitoring.hpp"
  54 #include "runtime/safepoint.hpp"
  55 #include "runtime/vmThread.hpp"
  56 #include "services/management.hpp"
  57 #include "services/memoryService.hpp"
  58 #include "utilities/align.hpp"
  59 #include "utilities/events.hpp"
  60 #include "utilities/stack.inline.hpp"
  61 
  62 elapsedTimer        PSMarkSweep::_accumulated_time;
  63 jlong               PSMarkSweep::_time_of_last_gc   = 0;
  64 CollectorCounters*  PSMarkSweep::_counters = NULL;
  65 
  66 void PSMarkSweep::initialize() {
  67   MemRegion mr = ParallelScavengeHeap::heap()->reserved_region();
  68   set_ref_processor(new ReferenceProcessor(mr));     // a vanilla ref proc
  69   _counters = new CollectorCounters("PSMarkSweep", 1);
  70 }
  71 
  72 // This method contains all heap specific policy for invoking mark sweep.
  73 // PSMarkSweep::invoke_no_policy() will only attempt to mark-sweep-compact


 598   PSYoungGen* young_gen = heap->young_gen();
 599   PSOldGen* old_gen = heap->old_gen();
 600 
 601   // Need to clear claim bits before the tracing starts.
 602   ClassLoaderDataGraph::clear_claimed_marks();
 603 
 604   // General strong roots.
 605   Universe::oops_do(adjust_pointer_closure());
 606   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 607   Threads::oops_do(adjust_pointer_closure(), NULL);
 608   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 609   Management::oops_do(adjust_pointer_closure());
 610   JvmtiExport::oops_do(adjust_pointer_closure());
 611   SystemDictionary::oops_do(adjust_pointer_closure());
 612   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
 613 
 614   // Now adjust pointers in remaining weak roots.  (All of which should
 615   // have been cleared if they pointed to non-surviving objects.)
 616   // Global (weak) JNI handles
 617   JNIHandles::weak_oops_do(adjust_pointer_closure());
 618   HeapMonitoring::weak_oops_do(adjust_pointer_closure());
 619 
 620   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 621   CodeCache::blobs_do(&adjust_from_blobs);
 622   AOTLoader::oops_do(adjust_pointer_closure());
 623   StringTable::oops_do(adjust_pointer_closure());
 624   ref_processor()->weak_oops_do(adjust_pointer_closure());
 625   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 626 
 627   adjust_marks();
 628 
 629   young_gen->adjust_pointers();
 630   old_gen->adjust_pointers();
 631 }
 632 
 633 void PSMarkSweep::mark_sweep_phase4() {
 634   EventMark m("4 compact heap");
 635   GCTraceTime(Info, gc, phases) tm("Phase 4: Move objects", _gc_timer);
 636 
 637   // All pointers are now adjusted, move objects accordingly
 638 


< prev index next >