< prev index next >

src/hotspot/share/gc/shared/collectedHeap.cpp

Print this page
rev 60422 : [mq]: 8248401-ayang-review


 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) {


< prev index next >