52 }; |
52 }; |
53 |
53 |
54 public: |
54 public: |
55 PSCardTable(MemRegion whole_heap) : CardTable(whole_heap, /* scanned_concurrently */ false) {} |
55 PSCardTable(MemRegion whole_heap) : CardTable(whole_heap, /* scanned_concurrently */ false) {} |
56 |
56 |
57 static jbyte youngergen_card_val() { return youngergen_card; } |
57 static CardValue youngergen_card_val() { return youngergen_card; } |
58 static jbyte verify_card_val() { return verify_card; } |
58 static CardValue verify_card_val() { return verify_card; } |
59 |
59 |
60 // Scavenge support |
60 // Scavenge support |
61 void scavenge_contents_parallel(ObjectStartArray* start_array, |
61 void scavenge_contents_parallel(ObjectStartArray* start_array, |
62 MutableSpace* sp, |
62 MutableSpace* sp, |
63 HeapWord* space_top, |
63 HeapWord* space_top, |
66 uint stripe_total); |
66 uint stripe_total); |
67 |
67 |
68 bool addr_is_marked_imprecise(void *addr); |
68 bool addr_is_marked_imprecise(void *addr); |
69 bool addr_is_marked_precise(void *addr); |
69 bool addr_is_marked_precise(void *addr); |
70 |
70 |
71 void set_card_newgen(void* addr) { jbyte* p = byte_for(addr); *p = verify_card; } |
71 void set_card_newgen(void* addr) { CardValue* p = byte_for(addr); *p = verify_card; } |
72 |
72 |
73 // Testers for entries |
73 // Testers for entries |
74 static bool card_is_dirty(int value) { return value == dirty_card; } |
74 static bool card_is_dirty(int value) { return value == dirty_card; } |
75 static bool card_is_newgen(int value) { return value == youngergen_card; } |
75 static bool card_is_newgen(int value) { return value == youngergen_card; } |
76 static bool card_is_clean(int value) { return value == clean_card; } |
76 static bool card_is_clean(int value) { return value == clean_card; } |
77 static bool card_is_verify(int value) { return value == verify_card; } |
77 static bool card_is_verify(int value) { return value == verify_card; } |
78 |
78 |
79 // Card marking |
79 // Card marking |
80 void inline_write_ref_field_gc(void* field, oop new_val) { |
80 void inline_write_ref_field_gc(void* field, oop new_val) { |
81 jbyte* byte = byte_for(field); |
81 CardValue* byte = byte_for(field); |
82 *byte = youngergen_card; |
82 *byte = youngergen_card; |
83 } |
83 } |
84 |
84 |
85 // ReduceInitialCardMarks support |
85 // ReduceInitialCardMarks support |
86 bool is_in_young(oop obj) const; |
86 bool is_in_young(oop obj) const; |
97 // Finds the lowest start address of a covered region that is |
97 // Finds the lowest start address of a covered region that is |
98 // previous (i.e., lower index) to the covered region with index "ind". |
98 // previous (i.e., lower index) to the covered region with index "ind". |
99 HeapWord* lowest_prev_committed_start(int ind) const; |
99 HeapWord* lowest_prev_committed_start(int ind) const; |
100 |
100 |
101 #ifdef ASSERT |
101 #ifdef ASSERT |
102 bool is_valid_card_address(jbyte* addr) { |
102 bool is_valid_card_address(CardValue* addr) { |
103 return (addr >= _byte_map) && (addr < _byte_map + _byte_map_size); |
103 return (addr >= _byte_map) && (addr < _byte_map + _byte_map_size); |
104 } |
104 } |
105 #endif // ASSERT |
105 #endif // ASSERT |
106 |
106 |
107 // Verification |
107 // Verification |