< prev index next >
src/share/vm/gc/g1/g1ConcurrentMark.cpp
Print this page
rev 13279 : 8182169: ArrayAllocator should take MEMFLAGS as regular parameter
Reviewed-by: tschatzl, kbarrett
rev 13282 : imported patch 8184346-cleanup-g1cmbitmap
rev 13283 : imported patch 8184346-rkennke-review
rev 13284 : [mq]: 8184346-erikd-mgerdin-review
*** 58,77 ****
#include "runtime/prefetch.inline.hpp"
#include "services/memTracker.hpp"
#include "utilities/align.hpp"
#include "utilities/growableArray.hpp"
- #ifndef PRODUCT
- bool G1CMBitMap::covers(MemRegion heap_rs) const {
- // assert(_bm.map() == _virtual_space.low(), "map inconsistency");
- assert(((size_t)_bm.size() * ((size_t)1 << _shifter)) == _word_size,
- "size inconsistency");
- return _start == (HeapWord*)(heap_rs.start()) &&
- _word_size == heap_rs.word_size();
- }
- #endif
-
void G1CMBitMap::print_on_error(outputStream* st, const char* prefix) const {
_bm.print_on_error(st, prefix);
}
size_t G1CMBitMap::compute_size(size_t heap_size) {
--- 58,67 ----
*** 81,98 ****
size_t G1CMBitMap::mark_distance() {
return MinObjAlignmentInBytes * BitsPerByte;
}
void G1CMBitMap::initialize(MemRegion heap, G1RegionToSpaceMapper* storage) {
! _start = heap.start();
! _word_size = heap.word_size();
! _bm = BitMapView((BitMap::bm_word_t*) storage->reserved().start(), _word_size >> _shifter);
storage->set_mapping_changed_listener(&_listener);
-
- assert(covers(heap), "Bitmap initialization inconsistency, does not cover expected memory area.");
}
void G1CMBitMapMappingChangedListener::on_commit(uint start_region, size_t num_regions, bool zero_filled) {
if (zero_filled) {
return;
--- 71,85 ----
size_t G1CMBitMap::mark_distance() {
return MinObjAlignmentInBytes * BitsPerByte;
}
void G1CMBitMap::initialize(MemRegion heap, G1RegionToSpaceMapper* storage) {
! _covered = heap;
! _bm = BitMapView((BitMap::bm_word_t*) storage->reserved().start(), _covered.word_size() >> _shifter);
storage->set_mapping_changed_listener(&_listener);
}
void G1CMBitMapMappingChangedListener::on_commit(uint start_region, size_t num_regions, bool zero_filled) {
if (zero_filled) {
return;
*** 101,115 ****
MemRegion mr(G1CollectedHeap::heap()->bottom_addr_for_region(start_region), num_regions * HeapRegion::GrainWords);
_bm->clear_range(mr);
}
void G1CMBitMap::clear_range(MemRegion mr) {
! mr.intersection(MemRegion(_start, _word_size));
! assert(!mr.is_empty(), "unexpected empty region");
// convert address range into offset range
! _bm.at_put_range(addr_to_offset(mr.start()),
! addr_to_offset(mr.end()), false);
}
G1CMMarkStack::G1CMMarkStack() :
_max_chunk_capacity(0),
_base(NULL),
--- 88,102 ----
MemRegion mr(G1CollectedHeap::heap()->bottom_addr_for_region(start_region), num_regions * HeapRegion::GrainWords);
_bm->clear_range(mr);
}
void G1CMBitMap::clear_range(MemRegion mr) {
! MemRegion intersection = mr.intersection(_covered);
! assert(!intersection.is_empty(), "Given range from " PTR_FORMAT " to " PTR_FORMAT " is completely outside the heap", p2i(mr.start()), p2i(mr.end()));
// convert address range into offset range
! _bm.at_put_range(addr_to_offset(intersection.start()),
! addr_to_offset(intersection.end()), false);
}
G1CMMarkStack::G1CMMarkStack() :
_max_chunk_capacity(0),
_base(NULL),
< prev index next >