127 size_t start = r->region_number() * ShenandoahHeapRegion::RegionSizeBytes / CMBitMap::heap_map_factor();
128 size_t end = (r->region_number() + 1) * ShenandoahHeapRegion::RegionSizeBytes / CMBitMap::heap_map_factor();
129 assert (end <= _bitmap_size, "end is sane: " SIZE_FORMAT " < " SIZE_FORMAT, end, _bitmap_size);
130
131 log_trace(gc, heap)("Pretouch bitmap under region " SIZE_FORMAT ": " PTR_FORMAT " -> " PTR_FORMAT,
132 r->region_number(), p2i(_bitmap0_base + start), p2i(_bitmap0_base + end));
133 os::pretouch_memory(_bitmap0_base + start, _bitmap0_base + end, _page_size);
134
135 log_trace(gc, heap)("Pretouch bitmap under region " SIZE_FORMAT ": " PTR_FORMAT " -> " PTR_FORMAT,
136 r->region_number(), p2i(_bitmap1_base + start), p2i(_bitmap1_base + end));
137 os::pretouch_memory(_bitmap1_base + start, _bitmap1_base + end, _page_size);
138
139 r = _regions->claim_next();
140 }
141 }
142 };
143
144 jint ShenandoahHeap::initialize() {
145 CollectedHeap::pre_initialize();
146
147 size_t init_byte_size = collector_policy()->initial_heap_byte_size();
148 size_t max_byte_size = collector_policy()->max_heap_byte_size();
149
150 Universe::check_alignment(max_byte_size,
151 ShenandoahHeapRegion::RegionSizeBytes,
152 "shenandoah heap");
153 Universe::check_alignment(init_byte_size,
154 ShenandoahHeapRegion::RegionSizeBytes,
155 "shenandoah heap");
156
157 ReservedSpace heap_rs = Universe::reserve_heap(max_byte_size,
158 Arguments::conservative_max_heap_alignment());
159 initialize_reserved_region((HeapWord*)heap_rs.base(), (HeapWord*) (heap_rs.base() + heap_rs.size()));
160
161 set_barrier_set(new ShenandoahBarrierSet(this));
162 ReservedSpace pgc_rs = heap_rs.first_part(max_byte_size);
163 _storage.initialize(pgc_rs, init_byte_size);
164
165 _num_regions = init_byte_size / ShenandoahHeapRegion::RegionSizeBytes;
166 _max_regions = max_byte_size / ShenandoahHeapRegion::RegionSizeBytes;
752 (words * HeapWordSize) / K, p2i(result), r->region_number());
753 } else {
754 log_debug(gc, humongous)("allocating humongous object of size: "SIZE_FORMAT" KB at location "PTR_FORMAT" failed",
755 (words * HeapWordSize) / K, p2i(result));
756 }
757
758
759 return result;
760
761 }
762
763 HeapWord* ShenandoahHeap::mem_allocate(size_t size,
764 bool* gc_overhead_limit_was_exceeded) {
765
766 #ifdef ASSERT
767 if (ShenandoahVerify && _numAllocs > 1000000) {
768 _numAllocs = 0;
769 }
770 _numAllocs++;
771 #endif
772 HeapWord* filler = allocate_memory(BrooksPointer::word_size() + size, false);
773 HeapWord* result = filler + BrooksPointer::word_size();
774 if (filler != NULL) {
775 BrooksPointer::initialize(oop(result));
776 _bytes_allocated_since_cm += size * HeapWordSize;
777
778 assert(! in_collection_set(result), "never allocate in targetted region");
779 return result;
780 } else {
781 /*
782 tty->print_cr("Out of memory. Requested number of words: "SIZE_FORMAT" used heap: "INT64_FORMAT", bytes allocated since last CM: "INT64_FORMAT,
783 size, used(), _bytes_allocated_since_cm);
784 {
785 print_heap_regions();
786 tty->print("Printing "SIZE_FORMAT" free regions:\n", _free_regions->count());
787 _free_regions->print();
788 }
789 */
790 return NULL;
791 }
792 }
|
127 size_t start = r->region_number() * ShenandoahHeapRegion::RegionSizeBytes / CMBitMap::heap_map_factor();
128 size_t end = (r->region_number() + 1) * ShenandoahHeapRegion::RegionSizeBytes / CMBitMap::heap_map_factor();
129 assert (end <= _bitmap_size, "end is sane: " SIZE_FORMAT " < " SIZE_FORMAT, end, _bitmap_size);
130
131 log_trace(gc, heap)("Pretouch bitmap under region " SIZE_FORMAT ": " PTR_FORMAT " -> " PTR_FORMAT,
132 r->region_number(), p2i(_bitmap0_base + start), p2i(_bitmap0_base + end));
133 os::pretouch_memory(_bitmap0_base + start, _bitmap0_base + end, _page_size);
134
135 log_trace(gc, heap)("Pretouch bitmap under region " SIZE_FORMAT ": " PTR_FORMAT " -> " PTR_FORMAT,
136 r->region_number(), p2i(_bitmap1_base + start), p2i(_bitmap1_base + end));
137 os::pretouch_memory(_bitmap1_base + start, _bitmap1_base + end, _page_size);
138
139 r = _regions->claim_next();
140 }
141 }
142 };
143
144 jint ShenandoahHeap::initialize() {
145 CollectedHeap::pre_initialize();
146
147 BrooksPointer::initial_checks();
148
149 size_t init_byte_size = collector_policy()->initial_heap_byte_size();
150 size_t max_byte_size = collector_policy()->max_heap_byte_size();
151
152 Universe::check_alignment(max_byte_size,
153 ShenandoahHeapRegion::RegionSizeBytes,
154 "shenandoah heap");
155 Universe::check_alignment(init_byte_size,
156 ShenandoahHeapRegion::RegionSizeBytes,
157 "shenandoah heap");
158
159 ReservedSpace heap_rs = Universe::reserve_heap(max_byte_size,
160 Arguments::conservative_max_heap_alignment());
161 initialize_reserved_region((HeapWord*)heap_rs.base(), (HeapWord*) (heap_rs.base() + heap_rs.size()));
162
163 set_barrier_set(new ShenandoahBarrierSet(this));
164 ReservedSpace pgc_rs = heap_rs.first_part(max_byte_size);
165 _storage.initialize(pgc_rs, init_byte_size);
166
167 _num_regions = init_byte_size / ShenandoahHeapRegion::RegionSizeBytes;
168 _max_regions = max_byte_size / ShenandoahHeapRegion::RegionSizeBytes;
754 (words * HeapWordSize) / K, p2i(result), r->region_number());
755 } else {
756 log_debug(gc, humongous)("allocating humongous object of size: "SIZE_FORMAT" KB at location "PTR_FORMAT" failed",
757 (words * HeapWordSize) / K, p2i(result));
758 }
759
760
761 return result;
762
763 }
764
765 HeapWord* ShenandoahHeap::mem_allocate(size_t size,
766 bool* gc_overhead_limit_was_exceeded) {
767
768 #ifdef ASSERT
769 if (ShenandoahVerify && _numAllocs > 1000000) {
770 _numAllocs = 0;
771 }
772 _numAllocs++;
773 #endif
774 HeapWord* filler = allocate_memory(size + BrooksPointer::word_size(), false);
775 HeapWord* result = filler + BrooksPointer::word_size();
776 if (filler != NULL) {
777 BrooksPointer::initialize(oop(result));
778 _bytes_allocated_since_cm += size * HeapWordSize;
779
780 assert(! in_collection_set(result), "never allocate in targetted region");
781 return result;
782 } else {
783 /*
784 tty->print_cr("Out of memory. Requested number of words: "SIZE_FORMAT" used heap: "INT64_FORMAT", bytes allocated since last CM: "INT64_FORMAT,
785 size, used(), _bytes_allocated_since_cm);
786 {
787 print_heap_regions();
788 tty->print("Printing "SIZE_FORMAT" free regions:\n", _free_regions->count());
789 _free_regions->print();
790 }
791 */
792 return NULL;
793 }
794 }
|