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() {
85 for (jbyte v = youngergenP1_card;
86 v < cur_youngergen_and_prev_nonclean_card;
87 v++) {
88 bool seen = false;
89 for (int g = 0; g < _regions_to_iterate; g++) {
90 if (_last_cur_val_in_gen[g] == v) {
91 seen = true;
92 break;
93 }
94 }
95 if (!seen) return v;
96 }
|
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);
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() {
85 for (jbyte v = youngergenP1_card;
86 v < cur_youngergen_and_prev_nonclean_card;
87 v++) {
88 bool seen = false;
89 for (int g = 0; g < _regions_to_iterate; g++) {
90 if (_last_cur_val_in_gen[g] == v) {
91 seen = true;
92 break;
93 }
94 }
95 if (!seen) return v;
96 }
|