174 if (!is_object_aligned(object)) {
175 return false;
176 }
177
178 if (!is_in(object)) {
179 return false;
180 }
181
182 if (is_in(object->klass_or_null())) {
183 return false;
184 }
185
186 return true;
187 }
188
189 // Memory state functions.
190
191
192 CollectedHeap::CollectedHeap() :
193 _is_gc_active(false),
194 _total_collections(0),
195 _total_full_collections(0),
196 _gc_cause(GCCause::_no_gc),
197 _gc_lastcause(GCCause::_no_gc)
198 {
199 const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
200 const size_t elements_per_word = HeapWordSize / sizeof(jint);
201 _filler_array_max_size = align_object_size(filler_array_hdr_size() +
202 max_len / elements_per_word);
203
204 NOT_PRODUCT(_promotion_failure_alot_count = 0;)
205 NOT_PRODUCT(_promotion_failure_alot_gc_number = 0;)
206
207 if (UsePerfData) {
208 EXCEPTION_MARK;
209
210 // create the gc cause jvmstat counters
211 _perf_gc_cause = PerfDataManager::create_string_variable(SUN_GC, "cause",
212 80, GCCause::to_string(_gc_cause), CHECK);
213
469 if (retire_tlabs) {
470 thread->tlab().retire(&stats);
471 } else {
472 thread->tlab().make_parsable();
473 }
474 }
475 }
476
477 stats.publish();
478 }
479
480 void CollectedHeap::resize_all_tlabs() {
481 assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(),
482 "Should only resize tlabs at safepoint");
483
484 if (UseTLAB && ResizeTLAB) {
485 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
486 thread->tlab().resize();
487 }
488 }
489 }
490
491 void CollectedHeap::full_gc_dump(GCTimer* timer, bool before) {
492 assert(timer != NULL, "timer is null");
493 if ((HeapDumpBeforeFullGC && before) || (HeapDumpAfterFullGC && !before)) {
494 GCTraceTime(Info, gc) tm(before ? "Heap Dump (before full gc)" : "Heap Dump (after full gc)", timer);
495 HeapDumper::dump_heap();
496 }
497
498 LogTarget(Trace, gc, classhisto) lt;
499 if (lt.is_enabled()) {
500 GCTraceTime(Trace, gc, classhisto) tm(before ? "Class Histogram (before full gc)" : "Class Histogram (after full gc)", timer);
501 ResourceMark rm;
502 LogStream ls(lt);
503 VM_GC_HeapInspection inspector(&ls, false /* ! full gc */);
504 inspector.doit();
505 }
506 }
507
508 void CollectedHeap::pre_full_gc_dump(GCTimer* timer) {
|
174 if (!is_object_aligned(object)) {
175 return false;
176 }
177
178 if (!is_in(object)) {
179 return false;
180 }
181
182 if (is_in(object->klass_or_null())) {
183 return false;
184 }
185
186 return true;
187 }
188
189 // Memory state functions.
190
191
192 CollectedHeap::CollectedHeap() :
193 _is_gc_active(false),
194 _last_whole_heap_examined_time_ns(os::javaTimeNanos()),
195 _total_collections(0),
196 _total_full_collections(0),
197 _gc_cause(GCCause::_no_gc),
198 _gc_lastcause(GCCause::_no_gc)
199 {
200 const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
201 const size_t elements_per_word = HeapWordSize / sizeof(jint);
202 _filler_array_max_size = align_object_size(filler_array_hdr_size() +
203 max_len / elements_per_word);
204
205 NOT_PRODUCT(_promotion_failure_alot_count = 0;)
206 NOT_PRODUCT(_promotion_failure_alot_gc_number = 0;)
207
208 if (UsePerfData) {
209 EXCEPTION_MARK;
210
211 // create the gc cause jvmstat counters
212 _perf_gc_cause = PerfDataManager::create_string_variable(SUN_GC, "cause",
213 80, GCCause::to_string(_gc_cause), CHECK);
214
470 if (retire_tlabs) {
471 thread->tlab().retire(&stats);
472 } else {
473 thread->tlab().make_parsable();
474 }
475 }
476 }
477
478 stats.publish();
479 }
480
481 void CollectedHeap::resize_all_tlabs() {
482 assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(),
483 "Should only resize tlabs at safepoint");
484
485 if (UseTLAB && ResizeTLAB) {
486 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
487 thread->tlab().resize();
488 }
489 }
490 }
491
492 jlong CollectedHeap::millis_since_last_whole_heap_examined() {
493 return (os::javaTimeNanos() - _last_whole_heap_examined_time_ns) / NANOSECS_PER_MILLISEC;
494 }
495
496 void CollectedHeap::record_whole_heap_examined_timestamp() {
497 _last_whole_heap_examined_time_ns = os::javaTimeNanos();
498 }
499
500 void CollectedHeap::full_gc_dump(GCTimer* timer, bool before) {
501 assert(timer != NULL, "timer is null");
502 if ((HeapDumpBeforeFullGC && before) || (HeapDumpAfterFullGC && !before)) {
503 GCTraceTime(Info, gc) tm(before ? "Heap Dump (before full gc)" : "Heap Dump (after full gc)", timer);
504 HeapDumper::dump_heap();
505 }
506
507 LogTarget(Trace, gc, classhisto) lt;
508 if (lt.is_enabled()) {
509 GCTraceTime(Trace, gc, classhisto) tm(before ? "Class Histogram (before full gc)" : "Class Histogram (after full gc)", timer);
510 ResourceMark rm;
511 LogStream ls(lt);
512 VM_GC_HeapInspection inspector(&ls, false /* ! full gc */);
513 inspector.doit();
514 }
515 }
516
517 void CollectedHeap::pre_full_gc_dump(GCTimer* timer) {
|