< prev index next >

src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.hpp

Print this page
rev 7318 : 8064721: The card tables only ever need two covering regions


  36  private:
  37   // Support methods for resizing the card table.
  38   // resize_commit_uncommit() returns true if the pages were committed or
  39   // uncommitted
  40   bool resize_commit_uncommit(int changed_region, MemRegion new_region);
  41   void resize_update_card_table_entries(int changed_region,
  42                                         MemRegion new_region);
  43   void resize_update_committed_table(int changed_region, MemRegion new_region);
  44   void resize_update_covered_table(int changed_region, MemRegion new_region);
  45 
  46  protected:
  47 
  48   static void verify_all_young_refs_precise_helper(MemRegion mr);
  49 
  50  public:
  51   enum ExtendedCardValue {
  52     youngergen_card   = CardTableModRefBS::CT_MR_BS_last_reserved + 1,
  53     verify_card       = CardTableModRefBS::CT_MR_BS_last_reserved + 5
  54   };
  55 
  56   CardTableExtension(MemRegion whole_heap, int max_covered_regions) :
  57     CardTableModRefBS(whole_heap, max_covered_regions) { }
  58 
  59   // Too risky for the 4/10/02 putback
  60   // BarrierSet::Name kind() { return BarrierSet::CardTableExtension; }
  61 
  62   // Scavenge support
  63   void scavenge_contents_parallel(ObjectStartArray* start_array,
  64                                   MutableSpace* sp,
  65                                   HeapWord* space_top,
  66                                   PSPromotionManager* pm,
  67                                   uint stripe_number,
  68                                   uint stripe_total);
  69 
  70   // Verification
  71   static void verify_all_young_refs_imprecise();
  72   static void verify_all_young_refs_precise();
  73 
  74   bool addr_is_marked_imprecise(void *addr);
  75   bool addr_is_marked_precise(void *addr);
  76 
  77   void set_card_newgen(void* addr)   { jbyte* p = byte_for(addr); *p = verify_card; }




  36  private:
  37   // Support methods for resizing the card table.
  38   // resize_commit_uncommit() returns true if the pages were committed or
  39   // uncommitted
  40   bool resize_commit_uncommit(int changed_region, MemRegion new_region);
  41   void resize_update_card_table_entries(int changed_region,
  42                                         MemRegion new_region);
  43   void resize_update_committed_table(int changed_region, MemRegion new_region);
  44   void resize_update_covered_table(int changed_region, MemRegion new_region);
  45 
  46  protected:
  47 
  48   static void verify_all_young_refs_precise_helper(MemRegion mr);
  49 
  50  public:
  51   enum ExtendedCardValue {
  52     youngergen_card   = CardTableModRefBS::CT_MR_BS_last_reserved + 1,
  53     verify_card       = CardTableModRefBS::CT_MR_BS_last_reserved + 5
  54   };
  55 
  56   CardTableExtension(MemRegion whole_heap) :
  57     CardTableModRefBS(whole_heap) { }
  58 
  59   // Too risky for the 4/10/02 putback
  60   // BarrierSet::Name kind() { return BarrierSet::CardTableExtension; }
  61 
  62   // Scavenge support
  63   void scavenge_contents_parallel(ObjectStartArray* start_array,
  64                                   MutableSpace* sp,
  65                                   HeapWord* space_top,
  66                                   PSPromotionManager* pm,
  67                                   uint stripe_number,
  68                                   uint stripe_total);
  69 
  70   // Verification
  71   static void verify_all_young_refs_imprecise();
  72   static void verify_all_young_refs_precise();
  73 
  74   bool addr_is_marked_imprecise(void *addr);
  75   bool addr_is_marked_precise(void *addr);
  76 
  77   void set_card_newgen(void* addr)   { jbyte* p = byte_for(addr); *p = verify_card; }


< prev index next >