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();
|