39 #endif // INCLUDE_ALL_GCS
40
41 CardTableRS::CardTableRS(MemRegion whole_heap,
42 int max_covered_regions) :
43 GenRemSet(),
44 _cur_youngergen_card_val(youngergenP1_card),
45 _regions_to_iterate(max_covered_regions - 1)
46 {
47 #if INCLUDE_ALL_GCS
48 if (UseG1GC) {
49 _ct_bs = new G1SATBCardTableLoggingModRefBS(whole_heap,
50 max_covered_regions);
51 } else {
52 _ct_bs = new CardTableModRefBSForCTRS(whole_heap, max_covered_regions);
53 }
54 #else
55 _ct_bs = new CardTableModRefBSForCTRS(whole_heap, max_covered_regions);
56 #endif
57 _ct_bs->initialize();
58 set_bs(_ct_bs);
59 _last_cur_val_in_gen = NEW_C_HEAP_ARRAY3(jbyte, GenCollectedHeap::max_gens + 1,
60 mtGC, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
61 if (_last_cur_val_in_gen == NULL) {
62 vm_exit_during_initialization("Could not create last_cur_val_in_gen array.");
63 }
64 for (int i = 0; i < GenCollectedHeap::max_gens + 1; i++) {
65 _last_cur_val_in_gen[i] = clean_card_val();
66 }
67 _ct_bs->set_CTRS(this);
68 }
69
70 CardTableRS::~CardTableRS() {
71 if (_ct_bs) {
72 delete _ct_bs;
73 _ct_bs = NULL;
74 }
75 if (_last_cur_val_in_gen) {
76 FREE_C_HEAP_ARRAY(jbyte, _last_cur_val_in_gen, mtInternal);
77 }
78 }
79
80 void CardTableRS::resize_covered_region(MemRegion new_region) {
81 _ct_bs->resize_covered_region(new_region);
82 }
83
84 jbyte CardTableRS::find_unused_youngergenP_card_value() {
|
39 #endif // INCLUDE_ALL_GCS
40
41 CardTableRS::CardTableRS(MemRegion whole_heap,
42 int max_covered_regions) :
43 GenRemSet(),
44 _cur_youngergen_card_val(youngergenP1_card),
45 _regions_to_iterate(max_covered_regions - 1)
46 {
47 #if INCLUDE_ALL_GCS
48 if (UseG1GC) {
49 _ct_bs = new G1SATBCardTableLoggingModRefBS(whole_heap,
50 max_covered_regions);
51 } else {
52 _ct_bs = new CardTableModRefBSForCTRS(whole_heap, max_covered_regions);
53 }
54 #else
55 _ct_bs = new CardTableModRefBSForCTRS(whole_heap, max_covered_regions);
56 #endif
57 _ct_bs->initialize();
58 set_bs(_ct_bs);
59 // max_gens is really GenCollectedHeap::heap()->gen_policy()->number_of_generations()
60 // (which always is 2), but GenCollectedHeap has not been initialized yet.
61 int max_gens = 2;
62 _last_cur_val_in_gen = NEW_C_HEAP_ARRAY3(jbyte, max_gens + 1,
63 mtGC, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
64 if (_last_cur_val_in_gen == NULL) {
65 vm_exit_during_initialization("Could not create last_cur_val_in_gen array.");
66 }
67 for (int i = 0; i < max_gens + 1; i++) {
68 _last_cur_val_in_gen[i] = clean_card_val();
69 }
70 _ct_bs->set_CTRS(this);
71 }
72
73 CardTableRS::~CardTableRS() {
74 if (_ct_bs) {
75 delete _ct_bs;
76 _ct_bs = NULL;
77 }
78 if (_last_cur_val_in_gen) {
79 FREE_C_HEAP_ARRAY(jbyte, _last_cur_val_in_gen, mtInternal);
80 }
81 }
82
83 void CardTableRS::resize_covered_region(MemRegion new_region) {
84 _ct_bs->resize_covered_region(new_region);
85 }
86
87 jbyte CardTableRS::find_unused_youngergenP_card_value() {
|