src/share/vm/utilities/bitMap.cpp

changeset 3901
24b9c7f4cae6
parent 3900
d2a62e0f25eb
child 4904
7b835924c31c
equal deleted inserted replaced
3898:bcffa4c5eef6 3901:24b9c7f4cae6
63 _size = size_in_bits; 63 _size = size_in_bits;
64 idx_t new_size_in_words = size_in_words(); 64 idx_t new_size_in_words = size_in_words();
65 if (in_resource_area) { 65 if (in_resource_area) {
66 _map = NEW_RESOURCE_ARRAY(bm_word_t, new_size_in_words); 66 _map = NEW_RESOURCE_ARRAY(bm_word_t, new_size_in_words);
67 } else { 67 } else {
68 if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map); 68 if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map, mtInternal);
69 _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words); 69 _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words, mtInternal);
70 } 70 }
71 Copy::disjoint_words((HeapWord*)old_map, (HeapWord*) _map, 71 Copy::disjoint_words((HeapWord*)old_map, (HeapWord*) _map,
72 MIN2(old_size_in_words, new_size_in_words)); 72 MIN2(old_size_in_words, new_size_in_words));
73 if (new_size_in_words > old_size_in_words) { 73 if (new_size_in_words > old_size_in_words) {
74 clear_range_of_words(old_size_in_words, size_in_words()); 74 clear_range_of_words(old_size_in_words, size_in_words());
467 467
468 BitMap::idx_t* BitMap::_pop_count_table = NULL; 468 BitMap::idx_t* BitMap::_pop_count_table = NULL;
469 469
470 void BitMap::init_pop_count_table() { 470 void BitMap::init_pop_count_table() {
471 if (_pop_count_table == NULL) { 471 if (_pop_count_table == NULL) {
472 BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256); 472 BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256, mtInternal);
473 for (uint i = 0; i < 256; i++) { 473 for (uint i = 0; i < 256; i++) {
474 table[i] = num_set_bits(i); 474 table[i] = num_set_bits(i);
475 } 475 }
476 476
477 intptr_t res = Atomic::cmpxchg_ptr((intptr_t) table, 477 intptr_t res = Atomic::cmpxchg_ptr((intptr_t) table,
478 (intptr_t*) &_pop_count_table, 478 (intptr_t*) &_pop_count_table,
479 (intptr_t) NULL_WORD); 479 (intptr_t) NULL_WORD);
480 if (res != NULL_WORD) { 480 if (res != NULL_WORD) {
481 guarantee( _pop_count_table == (void*) res, "invariant" ); 481 guarantee( _pop_count_table == (void*) res, "invariant" );
482 FREE_C_HEAP_ARRAY(bm_word_t, table); 482 FREE_C_HEAP_ARRAY(bm_word_t, table, mtInternal);
483 } 483 }
484 } 484 }
485 } 485 }
486 486
487 BitMap::idx_t BitMap::num_set_bits(bm_word_t w) { 487 BitMap::idx_t BitMap::num_set_bits(bm_word_t w) {

mercurial