< prev index next >

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

Print this page
rev 47223 : [mq]: heapz8


  31 #include "code/icBuffer.hpp"
  32 #include "gc/g1/g1FullGCScope.hpp"
  33 #include "gc/g1/g1MarkSweep.hpp"
  34 #include "gc/g1/g1RootProcessor.hpp"
  35 #include "gc/g1/g1StringDedup.hpp"
  36 #include "gc/serial/markSweep.inline.hpp"
  37 #include "gc/shared/gcHeapSummary.hpp"
  38 #include "gc/shared/gcLocker.hpp"
  39 #include "gc/shared/gcTimer.hpp"
  40 #include "gc/shared/gcTrace.hpp"
  41 #include "gc/shared/gcTraceTime.inline.hpp"
  42 #include "gc/shared/genCollectedHeap.hpp"
  43 #include "gc/shared/modRefBarrierSet.hpp"
  44 #include "gc/shared/referencePolicy.hpp"
  45 #include "gc/shared/space.hpp"
  46 #include "oops/instanceRefKlass.hpp"
  47 #include "oops/oop.inline.hpp"
  48 #include "prims/jvmtiExport.hpp"
  49 #include "runtime/atomic.hpp"
  50 #include "runtime/biasedLocking.hpp"

  51 #include "runtime/synchronizer.hpp"
  52 #include "runtime/thread.hpp"
  53 #include "runtime/vmThread.hpp"
  54 #include "utilities/copy.hpp"
  55 #include "utilities/events.hpp"
  56 
  57 class HeapRegion;
  58 
  59 void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp,
  60                                       bool clear_all_softrefs) {
  61   assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint");
  62   HandleMark hm;  // Discard invalid handles created during gc
  63 
  64 #if defined(COMPILER2) || INCLUDE_JVMCI
  65   DerivedPointerTable::clear();
  66 #endif
  67 #ifdef ASSERT
  68   if (G1CollectedHeap::heap()->collector_policy()->should_clear_all_soft_refs()) {
  69     assert(clear_all_softrefs, "Policy should have been checked earler");
  70   }


 256   // Adjust the pointers to reflect the new locations
 257   GCTraceTime(Info, gc, phases) tm("Phase 3: Adjust pointers", gc_timer());
 258 
 259   // Need cleared claim bits for the roots processing
 260   ClassLoaderDataGraph::clear_claimed_marks();
 261 
 262   CodeBlobToOopClosure adjust_code_closure(&GenMarkSweep::adjust_pointer_closure, CodeBlobToOopClosure::FixRelocations);
 263   {
 264     G1RootProcessor root_processor(g1h, 1);
 265     root_processor.process_all_roots(&GenMarkSweep::adjust_pointer_closure,
 266                                      &GenMarkSweep::adjust_cld_closure,
 267                                      &adjust_code_closure);
 268   }
 269 
 270   assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity");
 271   g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_pointer_closure);
 272 
 273   // Now adjust pointers in remaining weak roots.  (All of which should
 274   // have been cleared if they pointed to non-surviving objects.)
 275   JNIHandles::weak_oops_do(&GenMarkSweep::adjust_pointer_closure);

 276 
 277   if (G1StringDedup::is_enabled()) {
 278     G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure);
 279   }
 280 
 281   GenMarkSweep::adjust_marks();
 282 
 283   G1AdjustPointersClosure blk;
 284   g1h->heap_region_iterate(&blk);
 285 }
 286 
 287 class G1SpaceCompactClosure: public HeapRegionClosure {
 288 public:
 289   G1SpaceCompactClosure() {}
 290 
 291   bool doHeapRegion(HeapRegion* hr) {
 292     if (hr->is_humongous()) {
 293       if (hr->is_starts_humongous()) {
 294         oop obj = oop(hr->bottom());
 295         if (obj->is_gc_marked()) {




  31 #include "code/icBuffer.hpp"
  32 #include "gc/g1/g1FullGCScope.hpp"
  33 #include "gc/g1/g1MarkSweep.hpp"
  34 #include "gc/g1/g1RootProcessor.hpp"
  35 #include "gc/g1/g1StringDedup.hpp"
  36 #include "gc/serial/markSweep.inline.hpp"
  37 #include "gc/shared/gcHeapSummary.hpp"
  38 #include "gc/shared/gcLocker.hpp"
  39 #include "gc/shared/gcTimer.hpp"
  40 #include "gc/shared/gcTrace.hpp"
  41 #include "gc/shared/gcTraceTime.inline.hpp"
  42 #include "gc/shared/genCollectedHeap.hpp"
  43 #include "gc/shared/modRefBarrierSet.hpp"
  44 #include "gc/shared/referencePolicy.hpp"
  45 #include "gc/shared/space.hpp"
  46 #include "oops/instanceRefKlass.hpp"
  47 #include "oops/oop.inline.hpp"
  48 #include "prims/jvmtiExport.hpp"
  49 #include "runtime/atomic.hpp"
  50 #include "runtime/biasedLocking.hpp"
  51 #include "runtime/heapMonitoring.hpp"
  52 #include "runtime/synchronizer.hpp"
  53 #include "runtime/thread.hpp"
  54 #include "runtime/vmThread.hpp"
  55 #include "utilities/copy.hpp"
  56 #include "utilities/events.hpp"
  57 
  58 class HeapRegion;
  59 
  60 void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp,
  61                                       bool clear_all_softrefs) {
  62   assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint");
  63   HandleMark hm;  // Discard invalid handles created during gc
  64 
  65 #if defined(COMPILER2) || INCLUDE_JVMCI
  66   DerivedPointerTable::clear();
  67 #endif
  68 #ifdef ASSERT
  69   if (G1CollectedHeap::heap()->collector_policy()->should_clear_all_soft_refs()) {
  70     assert(clear_all_softrefs, "Policy should have been checked earler");
  71   }


 257   // Adjust the pointers to reflect the new locations
 258   GCTraceTime(Info, gc, phases) tm("Phase 3: Adjust pointers", gc_timer());
 259 
 260   // Need cleared claim bits for the roots processing
 261   ClassLoaderDataGraph::clear_claimed_marks();
 262 
 263   CodeBlobToOopClosure adjust_code_closure(&GenMarkSweep::adjust_pointer_closure, CodeBlobToOopClosure::FixRelocations);
 264   {
 265     G1RootProcessor root_processor(g1h, 1);
 266     root_processor.process_all_roots(&GenMarkSweep::adjust_pointer_closure,
 267                                      &GenMarkSweep::adjust_cld_closure,
 268                                      &adjust_code_closure);
 269   }
 270 
 271   assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity");
 272   g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_pointer_closure);
 273 
 274   // Now adjust pointers in remaining weak roots.  (All of which should
 275   // have been cleared if they pointed to non-surviving objects.)
 276   JNIHandles::weak_oops_do(&GenMarkSweep::adjust_pointer_closure);
 277   HeapMonitoring::weak_oops_do(&GenMarkSweep::adjust_pointer_closure);
 278 
 279   if (G1StringDedup::is_enabled()) {
 280     G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure);
 281   }
 282 
 283   GenMarkSweep::adjust_marks();
 284 
 285   G1AdjustPointersClosure blk;
 286   g1h->heap_region_iterate(&blk);
 287 }
 288 
 289 class G1SpaceCompactClosure: public HeapRegionClosure {
 290 public:
 291   G1SpaceCompactClosure() {}
 292 
 293   bool doHeapRegion(HeapRegion* hr) {
 294     if (hr->is_humongous()) {
 295       if (hr->is_starts_humongous()) {
 296         oop obj = oop(hr->bottom());
 297         if (obj->is_gc_marked()) {


< prev index next >