370 _max_regions = max_num_regions; |
370 _max_regions = max_num_regions; |
371 _cache = Padded2DArray<int, mtGC>::create_unfreeable(n_par_rs, |
371 _cache = Padded2DArray<int, mtGC>::create_unfreeable(n_par_rs, |
372 _max_regions, |
372 _max_regions, |
373 &_static_mem_size); |
373 &_static_mem_size); |
374 |
374 |
375 for (uint i = 0; i < n_par_rs; i++) { |
375 invalidate(0, _max_regions); |
376 for (uint j = 0; j < _max_regions; j++) { |
376 } |
377 set(i, j, InvalidCard); |
377 |
378 } |
378 void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) { |
379 } |
379 guarantee((size_t)start_idx + new_num_regions <= max_uintx, |
380 } |
380 err_msg("Trying to invalidate beyond maximum region, from %u size "SIZE_FORMAT, |
381 |
381 start_idx, new_num_regions)); |
382 void FromCardCache::shrink(uint new_num_regions) { |
|
383 for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) { |
382 for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) { |
384 assert(new_num_regions <= _max_regions, "Must be within max."); |
383 uint end_idx = (start_idx + (uint)new_num_regions); |
385 for (uint j = new_num_regions; j < _max_regions; j++) { |
384 assert(end_idx <= _max_regions, "Must be within max."); |
|
385 for (uint j = start_idx; j < end_idx; j++) { |
386 set(i, j, InvalidCard); |
386 set(i, j, InvalidCard); |
387 } |
387 } |
388 } |
388 } |
389 } |
389 } |
390 |
390 |
404 for (uint i = 0; i < num_par_remsets; i++) { |
404 for (uint i = 0; i < num_par_remsets; i++) { |
405 set(i, region_idx, InvalidCard); |
405 set(i, region_idx, InvalidCard); |
406 } |
406 } |
407 } |
407 } |
408 |
408 |
409 void OtherRegionsTable::init_from_card_cache(uint max_regions) { |
409 void OtherRegionsTable::initialize(uint max_regions) { |
410 FromCardCache::initialize(HeapRegionRemSet::num_par_rem_sets(), max_regions); |
410 FromCardCache::initialize(HeapRegionRemSet::num_par_rem_sets(), max_regions); |
411 } |
411 } |
412 |
412 |
413 void OtherRegionsTable::shrink_from_card_cache(uint new_num_regions) { |
413 void OtherRegionsTable::invalidate(uint start_idx, size_t num_regions) { |
414 FromCardCache::shrink(new_num_regions); |
414 FromCardCache::invalidate(start_idx, num_regions); |
415 } |
415 } |
416 |
416 |
417 void OtherRegionsTable::print_from_card_cache() { |
417 void OtherRegionsTable::print_from_card_cache() { |
418 FromCardCache::print(); |
418 FromCardCache::print(); |
419 } |
419 } |
837 } |
837 } |
838 |
838 |
839 HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, |
839 HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, |
840 HeapRegion* hr) |
840 HeapRegion* hr) |
841 : _bosa(bosa), |
841 : _bosa(bosa), |
842 _m(Mutex::leaf, FormatBuffer<128>("HeapRegionRemSet lock #"UINT32_FORMAT, hr->hrs_index()), true), |
842 _m(Mutex::leaf, FormatBuffer<128>("HeapRegionRemSet lock #%u", hr->hrs_index()), true), |
843 _code_roots(), _other_regions(hr, &_m) { |
843 _code_roots(), _other_regions(hr, &_m), _iter_state(Unclaimed), _iter_claimed(0) { |
844 reset_for_par_iteration(); |
844 reset_for_par_iteration(); |
845 } |
845 } |
846 |
846 |
847 void HeapRegionRemSet::setup_remset_size() { |
847 void HeapRegionRemSet::setup_remset_size() { |
848 // Setup sparse and fine-grain tables sizes. |
848 // Setup sparse and fine-grain tables sizes. |