766 if (scan_limit <= card_start) {
767 // If the card starts above the area in the region containing objects to scan, skip it.
768 return false;
769 }
770
771 // Don't use addr_for(card_ptr + 1) which can ask for
772 // a card beyond the heap.
773 HeapWord* card_end = card_start + CardTableModRefBS::card_size_in_words;
774 MemRegion dirty_region(card_start, MIN2(scan_limit, card_end));
775 assert(!dirty_region.is_empty(), "sanity");
776
777 update_rs_cl->set_region(r);
778 update_rs_cl->reset_has_refs_into_cset();
779
780 bool card_processed = r->oops_on_card_seq_iterate_careful<true>(dirty_region, update_rs_cl);
781 assert(card_processed, "must be");
782
783 return update_rs_cl->has_refs_into_cset();
784 }
785
786 void G1RemSet::initialize_periodic_summary_info() {
787 if (log_is_enabled(Trace, gc, remset)) {
788 _prev_period_summary.initialize(this);
789 }
790 }
791
792 void G1RemSet::print_periodic_summary_info(const char* header, uint period_count) {
793 if ((G1SummarizeRSetStatsPeriod > 0) && log_is_enabled(Trace, gc, remset) &&
794 (period_count % G1SummarizeRSetStatsPeriod == 0)) {
795
796 assert(_prev_period_summary.initialized(), "Periodic remembered set summary must be initialized.");
797
798 G1RemSetSummary current;
799 current.initialize(this);
800 _prev_period_summary.subtract_from(¤t);
801
802 Log(gc, remset) log;
803 log.trace("%s", header);
804 ResourceMark rm;
805 _prev_period_summary.print_on(log.trace_stream());
806
807 _prev_period_summary.set(¤t);
808 }
809 }
810
811 void G1RemSet::print_summary_info() {
812 Log(gc, remset, exit) log;
813 if (log.is_trace()) {
814 log.trace(" Cumulative RS summary");
815 G1RemSetSummary current;
816 current.initialize(this);
817 ResourceMark rm;
818 current.print_on(log.trace_stream());
819 }
820 }
821
822 void G1RemSet::create_card_live_data(WorkGang* workers, G1CMBitMap* mark_bitmap) {
823 _card_live_data.create(workers, mark_bitmap);
824 }
825
826 void G1RemSet::finalize_card_live_data(WorkGang* workers, G1CMBitMap* mark_bitmap) {
827 _card_live_data.finalize(workers, mark_bitmap);
828 }
829
830 void G1RemSet::verify_card_live_data(WorkGang* workers, G1CMBitMap* bitmap) {
831 _card_live_data.verify(workers, bitmap);
832 }
833
834 void G1RemSet::clear_card_live_data(WorkGang* workers) {
835 _card_live_data.clear(workers);
836 }
|
766 if (scan_limit <= card_start) {
767 // If the card starts above the area in the region containing objects to scan, skip it.
768 return false;
769 }
770
771 // Don't use addr_for(card_ptr + 1) which can ask for
772 // a card beyond the heap.
773 HeapWord* card_end = card_start + CardTableModRefBS::card_size_in_words;
774 MemRegion dirty_region(card_start, MIN2(scan_limit, card_end));
775 assert(!dirty_region.is_empty(), "sanity");
776
777 update_rs_cl->set_region(r);
778 update_rs_cl->reset_has_refs_into_cset();
779
780 bool card_processed = r->oops_on_card_seq_iterate_careful<true>(dirty_region, update_rs_cl);
781 assert(card_processed, "must be");
782
783 return update_rs_cl->has_refs_into_cset();
784 }
785
786 void G1RemSet::print_periodic_summary_info(const char* header, uint period_count) {
787 if ((G1SummarizeRSetStatsPeriod > 0) && log_is_enabled(Trace, gc, remset) &&
788 (period_count % G1SummarizeRSetStatsPeriod == 0)) {
789
790 G1RemSetSummary current;
791 _prev_period_summary.subtract_from(¤t);
792
793 Log(gc, remset) log;
794 log.trace("%s", header);
795 ResourceMark rm;
796 _prev_period_summary.print_on(log.trace_stream());
797
798 _prev_period_summary.set(¤t);
799 }
800 }
801
802 void G1RemSet::print_summary_info() {
803 Log(gc, remset, exit) log;
804 if (log.is_trace()) {
805 log.trace(" Cumulative RS summary");
806 G1RemSetSummary current;
807 ResourceMark rm;
808 current.print_on(log.trace_stream());
809 }
810 }
811
812 void G1RemSet::create_card_live_data(WorkGang* workers, G1CMBitMap* mark_bitmap) {
813 _card_live_data.create(workers, mark_bitmap);
814 }
815
816 void G1RemSet::finalize_card_live_data(WorkGang* workers, G1CMBitMap* mark_bitmap) {
817 _card_live_data.finalize(workers, mark_bitmap);
818 }
819
820 void G1RemSet::verify_card_live_data(WorkGang* workers, G1CMBitMap* bitmap) {
821 _card_live_data.verify(workers, bitmap);
822 }
823
824 void G1RemSet::clear_card_live_data(WorkGang* workers) {
825 _card_live_data.clear(workers);
826 }
|