Mercurial > hg > graal-compiler
comparison src/share/vm/gc_implementation/g1/heapRegion.hpp @ 3317:063382f9b575
7035144: G1: nightly failure: Non-dirty cards in region that should be dirty (failures still exist...)
Summary: We should only undirty cards after we decide that they are not on a young region, not before. The fix also includes improvements to the verify_dirty_region() method which print out which cards were not found dirty.
Reviewed-by: johnc, brutisso
author | tonyp |
---|---|
date | Fri, 29 Apr 2011 14:59:04 -0400 |
parents | 371bbc844bf1 |
children | c3f1170908be |
comparison
equal
deleted
inserted
replaced
3316:cd8e33b2a8ad | 3317:063382f9b575 |
---|---|
582 // Allows logical separation between objects allocated before and after. | 582 // Allows logical separation between objects allocated before and after. |
583 void save_marks(); | 583 void save_marks(); |
584 | 584 |
585 // Reset HR stuff to default values. | 585 // Reset HR stuff to default values. |
586 void hr_clear(bool par, bool clear_space); | 586 void hr_clear(bool par, bool clear_space); |
587 void par_clear(); | |
587 | 588 |
588 void initialize(MemRegion mr, bool clear_space, bool mangle_space); | 589 void initialize(MemRegion mr, bool clear_space, bool mangle_space); |
589 | 590 |
590 // Get the start of the unmarked area in this region. | 591 // Get the start of the unmarked area in this region. |
591 HeapWord* prev_top_at_mark_start() const { return _prev_top_at_mark_start; } | 592 HeapWord* prev_top_at_mark_start() const { return _prev_top_at_mark_start; } |
800 // "cl->abort()".) Return of "NULL" indicates that the iteration | 801 // "cl->abort()".) Return of "NULL" indicates that the iteration |
801 // completed. | 802 // completed. |
802 HeapWord* | 803 HeapWord* |
803 object_iterate_mem_careful(MemRegion mr, ObjectClosure* cl); | 804 object_iterate_mem_careful(MemRegion mr, ObjectClosure* cl); |
804 | 805 |
805 // In this version - if filter_young is true and the region | 806 // filter_young: if true and the region is a young region then we |
806 // is a young region then we skip the iteration. | 807 // skip the iteration. |
808 // card_ptr: if not NULL, and we decide that the card is not young | |
809 // and we iterate over it, we'll clean the card before we start the | |
810 // iteration. | |
807 HeapWord* | 811 HeapWord* |
808 oops_on_card_seq_iterate_careful(MemRegion mr, | 812 oops_on_card_seq_iterate_careful(MemRegion mr, |
809 FilterOutOfRegionClosure* cl, | 813 FilterOutOfRegionClosure* cl, |
810 bool filter_young); | 814 bool filter_young, |
815 jbyte* card_ptr); | |
811 | 816 |
812 // A version of block start that is guaranteed to find *some* block | 817 // A version of block start that is guaranteed to find *some* block |
813 // boundary at or before "p", but does not object iteration, and may | 818 // boundary at or before "p", but does not object iteration, and may |
814 // therefore be used safely when the heap is unparseable. | 819 // therefore be used safely when the heap is unparseable. |
815 HeapWord* block_start_careful(const void* p) const { | 820 HeapWord* block_start_careful(const void* p) const { |