155 // default implementations, for collectors which don't support this
156 // feature.
157 bool CollectedHeap::supports_concurrent_phase_control() const {
158 return false;
159 }
160
161 const char* const* CollectedHeap::concurrent_phases() const {
162 static const char* const result[] = { NULL };
163 return result;
164 }
165
166 bool CollectedHeap::request_concurrent_phase(const char* phase) {
167 return false;
168 }
169
170 // Memory state functions.
171
172
173 CollectedHeap::CollectedHeap() :
174 _barrier_set(NULL),
175 _is_gc_active(false),
176 _total_collections(0),
177 _total_full_collections(0),
178 _gc_cause(GCCause::_no_gc),
179 _gc_lastcause(GCCause::_no_gc),
180 _defer_initial_card_mark(false) // strengthened by subclass in pre_initialize() below.
181 {
182 const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
183 const size_t elements_per_word = HeapWordSize / sizeof(jint);
184 _filler_array_max_size = align_object_size(filler_array_hdr_size() +
185 max_len / elements_per_word);
186
187 NOT_PRODUCT(_promotion_failure_alot_count = 0;)
188 NOT_PRODUCT(_promotion_failure_alot_gc_number = 0;)
189
190 if (UsePerfData) {
191 EXCEPTION_MARK;
192
193 // create the gc cause jvmstat counters
194 _perf_gc_cause = PerfDataManager::create_string_variable(SUN_GC, "cause",
591 LogStream ls(lt);
592 VM_GC_HeapInspection inspector(&ls, false /* ! full gc */);
593 inspector.doit();
594 }
595 }
596
597 void CollectedHeap::pre_full_gc_dump(GCTimer* timer) {
598 full_gc_dump(timer, true);
599 }
600
601 void CollectedHeap::post_full_gc_dump(GCTimer* timer) {
602 full_gc_dump(timer, false);
603 }
604
605 void CollectedHeap::initialize_reserved_region(HeapWord *start, HeapWord *end) {
606 // It is important to do this in a way such that concurrent readers can't
607 // temporarily think something is in the heap. (Seen this happen in asserts.)
608 _reserved.set_word_size(0);
609 _reserved.set_start(start);
610 _reserved.set_end(end);
611 }
|
155 // default implementations, for collectors which don't support this
156 // feature.
157 bool CollectedHeap::supports_concurrent_phase_control() const {
158 return false;
159 }
160
161 const char* const* CollectedHeap::concurrent_phases() const {
162 static const char* const result[] = { NULL };
163 return result;
164 }
165
166 bool CollectedHeap::request_concurrent_phase(const char* phase) {
167 return false;
168 }
169
170 // Memory state functions.
171
172
173 CollectedHeap::CollectedHeap() :
174 _barrier_set(NULL),
175 _servicability(NULL),
176 _is_gc_active(false),
177 _total_collections(0),
178 _total_full_collections(0),
179 _gc_cause(GCCause::_no_gc),
180 _gc_lastcause(GCCause::_no_gc),
181 _defer_initial_card_mark(false) // strengthened by subclass in pre_initialize() below.
182 {
183 const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
184 const size_t elements_per_word = HeapWordSize / sizeof(jint);
185 _filler_array_max_size = align_object_size(filler_array_hdr_size() +
186 max_len / elements_per_word);
187
188 NOT_PRODUCT(_promotion_failure_alot_count = 0;)
189 NOT_PRODUCT(_promotion_failure_alot_gc_number = 0;)
190
191 if (UsePerfData) {
192 EXCEPTION_MARK;
193
194 // create the gc cause jvmstat counters
195 _perf_gc_cause = PerfDataManager::create_string_variable(SUN_GC, "cause",
592 LogStream ls(lt);
593 VM_GC_HeapInspection inspector(&ls, false /* ! full gc */);
594 inspector.doit();
595 }
596 }
597
598 void CollectedHeap::pre_full_gc_dump(GCTimer* timer) {
599 full_gc_dump(timer, true);
600 }
601
602 void CollectedHeap::post_full_gc_dump(GCTimer* timer) {
603 full_gc_dump(timer, false);
604 }
605
606 void CollectedHeap::initialize_reserved_region(HeapWord *start, HeapWord *end) {
607 // It is important to do this in a way such that concurrent readers can't
608 // temporarily think something is in the heap. (Seen this happen in asserts.)
609 _reserved.set_word_size(0);
610 _reserved.set_start(start);
611 _reserved.set_end(end);
612 }
613
614 GCServicabilitySupport* CollectedHeap::servicability_support() {
615 if (_servicability == NULL) {
616 _servicability = create_servicability_support();
617 }
618 assert(_servicability != NULL, "Need servicability support");
619 return _servicability;
620 }
|