< prev index next >

src/share/vm/gc/parallel/psScavenge.cpp

Print this page




 334     // Verify the object start arrays.
 335     if (VerifyObjectStartArray &&
 336         VerifyBeforeGC) {
 337       old_gen->verify_object_start_array();
 338     }
 339 
 340     // Verify no unmarked old->young roots
 341     if (VerifyRememberedSets) {
 342       CardTableExtension::verify_all_young_refs_imprecise();
 343     }
 344 
 345     if (!ScavengeWithObjectsInToSpace) {
 346       assert(young_gen->to_space()->is_empty(),
 347              "Attempt to scavenge with live objects in to_space");
 348       young_gen->to_space()->clear(SpaceDecorator::Mangle);
 349     } else if (ZapUnusedHeapArea) {
 350       young_gen->to_space()->mangle_unused_area();
 351     }
 352     save_to_space_top_before_gc();
 353 
 354     COMPILER2_PRESENT(DerivedPointerTable::clear());


 355 
 356     reference_processor()->enable_discovery();
 357     reference_processor()->setup_policy(false);
 358 
 359     // We track how much was promoted to the next generation for
 360     // the AdaptiveSizePolicy.
 361     size_t old_gen_used_before = old_gen->used_in_bytes();
 362 
 363     // For PrintGCDetails
 364     size_t young_gen_used_before = young_gen->used_in_bytes();
 365 
 366     // Reset our survivor overflow.
 367     set_survivor_overflow(false);
 368 
 369     // We need to save the old top values before
 370     // creating the promotion_manager. We pass the top
 371     // values to the card_table, to prevent it from
 372     // straying into the promotion labs.
 373     HeapWord* old_top = old_gen->object_space()->top();
 374 


 606 
 607         if (PrintAdaptiveSizePolicy) {
 608           gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ",
 609                          heap->total_collections());
 610         }
 611       }
 612 
 613       // Update the structure of the eden. With NUMA-eden CPU hotplugging or offlining can
 614       // cause the change of the heap layout. Make sure eden is reshaped if that's the case.
 615       // Also update() will case adaptive NUMA chunk resizing.
 616       assert(young_gen->eden_space()->is_empty(), "eden space should be empty now");
 617       young_gen->eden_space()->update();
 618 
 619       heap->gc_policy_counters()->update_counters();
 620 
 621       heap->resize_all_tlabs();
 622 
 623       assert(young_gen->to_space()->is_empty(), "to space should be empty now");
 624     }
 625 
 626     COMPILER2_PRESENT(DerivedPointerTable::update_pointers());


 627 
 628     NOT_PRODUCT(reference_processor()->verify_no_references_recorded());
 629 
 630     {
 631       GCTraceTime tm("Prune Scavenge Root Methods", false, false, &_gc_timer, _gc_tracer.gc_id());
 632 
 633       CodeCache::prune_scavenge_root_nmethods();
 634     }
 635 
 636     // Re-verify object start arrays
 637     if (VerifyObjectStartArray &&
 638         VerifyAfterGC) {
 639       old_gen->verify_object_start_array();
 640     }
 641 
 642     // Verify all old -> young cards are now precise
 643     if (VerifyRememberedSets) {
 644       // Precise verification will give false positives. Until this is fixed,
 645       // use imprecise verification.
 646       // CardTableExtension::verify_all_young_refs_precise();




 334     // Verify the object start arrays.
 335     if (VerifyObjectStartArray &&
 336         VerifyBeforeGC) {
 337       old_gen->verify_object_start_array();
 338     }
 339 
 340     // Verify no unmarked old->young roots
 341     if (VerifyRememberedSets) {
 342       CardTableExtension::verify_all_young_refs_imprecise();
 343     }
 344 
 345     if (!ScavengeWithObjectsInToSpace) {
 346       assert(young_gen->to_space()->is_empty(),
 347              "Attempt to scavenge with live objects in to_space");
 348       young_gen->to_space()->clear(SpaceDecorator::Mangle);
 349     } else if (ZapUnusedHeapArea) {
 350       young_gen->to_space()->mangle_unused_area();
 351     }
 352     save_to_space_top_before_gc();
 353 
 354 #if defined(COMPILER2) || INCLUDE_JVMCI
 355     DerivedPointerTable::clear();
 356 #endif
 357 
 358     reference_processor()->enable_discovery();
 359     reference_processor()->setup_policy(false);
 360 
 361     // We track how much was promoted to the next generation for
 362     // the AdaptiveSizePolicy.
 363     size_t old_gen_used_before = old_gen->used_in_bytes();
 364 
 365     // For PrintGCDetails
 366     size_t young_gen_used_before = young_gen->used_in_bytes();
 367 
 368     // Reset our survivor overflow.
 369     set_survivor_overflow(false);
 370 
 371     // We need to save the old top values before
 372     // creating the promotion_manager. We pass the top
 373     // values to the card_table, to prevent it from
 374     // straying into the promotion labs.
 375     HeapWord* old_top = old_gen->object_space()->top();
 376 


 608 
 609         if (PrintAdaptiveSizePolicy) {
 610           gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ",
 611                          heap->total_collections());
 612         }
 613       }
 614 
 615       // Update the structure of the eden. With NUMA-eden CPU hotplugging or offlining can
 616       // cause the change of the heap layout. Make sure eden is reshaped if that's the case.
 617       // Also update() will case adaptive NUMA chunk resizing.
 618       assert(young_gen->eden_space()->is_empty(), "eden space should be empty now");
 619       young_gen->eden_space()->update();
 620 
 621       heap->gc_policy_counters()->update_counters();
 622 
 623       heap->resize_all_tlabs();
 624 
 625       assert(young_gen->to_space()->is_empty(), "to space should be empty now");
 626     }
 627 
 628 #if defined(COMPILER2) || INCLUDE_JVMCI
 629     DerivedPointerTable::update_pointers();
 630 #endif
 631 
 632     NOT_PRODUCT(reference_processor()->verify_no_references_recorded());
 633 
 634     {
 635       GCTraceTime tm("Prune Scavenge Root Methods", false, false, &_gc_timer, _gc_tracer.gc_id());
 636 
 637       CodeCache::prune_scavenge_root_nmethods();
 638     }
 639 
 640     // Re-verify object start arrays
 641     if (VerifyObjectStartArray &&
 642         VerifyAfterGC) {
 643       old_gen->verify_object_start_array();
 644     }
 645 
 646     // Verify all old -> young cards are now precise
 647     if (VerifyRememberedSets) {
 648       // Precise verification will give false positives. Until this is fixed,
 649       // use imprecise verification.
 650       // CardTableExtension::verify_all_young_refs_precise();


< prev index next >