src/share/vm/gc_interface/collectedHeap.cpp

Print this page
rev 6084 : 8036703: Add trace event with statistics for the metaspace chunk free lists
rev 6085 : 8036703: incremental: webrev.03 -> webrev.04


  80 
  81 GCHeapSummary CollectedHeap::create_heap_summary() {
  82   VirtualSpaceSummary heap_space = create_heap_space_summary();
  83   return GCHeapSummary(heap_space, used());
  84 }
  85 
  86 MetaspaceSummary CollectedHeap::create_metaspace_summary() {
  87   const MetaspaceSizes meta_space(
  88       MetaspaceAux::allocated_capacity_bytes(),
  89       MetaspaceAux::allocated_used_bytes(),
  90       MetaspaceAux::reserved_bytes());
  91   const MetaspaceSizes data_space(
  92       MetaspaceAux::allocated_capacity_bytes(Metaspace::NonClassType),
  93       MetaspaceAux::allocated_used_bytes(Metaspace::NonClassType),
  94       MetaspaceAux::reserved_bytes(Metaspace::NonClassType));
  95   const MetaspaceSizes class_space(
  96       MetaspaceAux::allocated_capacity_bytes(Metaspace::ClassType),
  97       MetaspaceAux::allocated_used_bytes(Metaspace::ClassType),
  98       MetaspaceAux::reserved_bytes(Metaspace::ClassType));
  99 
 100   return MetaspaceSummary(MetaspaceGC::capacity_until_GC(), meta_space, data_space, class_space);






 101 }
 102 
 103 void CollectedHeap::print_heap_before_gc() {
 104   if (PrintHeapAtGC) {
 105     Universe::print_heap_before_gc();
 106   }
 107   if (_gc_heap_log != NULL) {
 108     _gc_heap_log->log_heap_before();
 109   }
 110 }
 111 
 112 void CollectedHeap::print_heap_after_gc() {
 113   if (PrintHeapAtGC) {
 114     Universe::print_heap_after_gc();
 115   }
 116   if (_gc_heap_log != NULL) {
 117     _gc_heap_log->log_heap_after();
 118   }
 119 }
 120 
 121 void CollectedHeap::register_nmethod(nmethod* nm) {
 122   assert_locked_or_safepoint(CodeCache_lock);
 123 }
 124 
 125 void CollectedHeap::unregister_nmethod(nmethod* nm) {
 126   assert_locked_or_safepoint(CodeCache_lock);
 127 }
 128 
 129 void CollectedHeap::trace_heap(GCWhen::Type when, GCTracer* gc_tracer) {
 130   const GCHeapSummary& heap_summary = create_heap_summary();


 131   const MetaspaceSummary& metaspace_summary = create_metaspace_summary();
 132   gc_tracer->report_gc_heap_summary(when, heap_summary, metaspace_summary);
 133 }
 134 
 135 void CollectedHeap::trace_heap_before_gc(GCTracer* gc_tracer) {
 136   trace_heap(GCWhen::BeforeGC, gc_tracer);
 137 }
 138 
 139 void CollectedHeap::trace_heap_after_gc(GCTracer* gc_tracer) {
 140   trace_heap(GCWhen::AfterGC, gc_tracer);
 141 }
 142 
 143 // Memory state functions.
 144 
 145 
 146 CollectedHeap::CollectedHeap() : _n_par_threads(0)
 147 {
 148   const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
 149   const size_t elements_per_word = HeapWordSize / sizeof(jint);
 150   _filler_array_max_size = align_object_size(filler_array_hdr_size() +
 151                                              max_len / elements_per_word);
 152 




  80 
  81 GCHeapSummary CollectedHeap::create_heap_summary() {
  82   VirtualSpaceSummary heap_space = create_heap_space_summary();
  83   return GCHeapSummary(heap_space, used());
  84 }
  85 
  86 MetaspaceSummary CollectedHeap::create_metaspace_summary() {
  87   const MetaspaceSizes meta_space(
  88       MetaspaceAux::allocated_capacity_bytes(),
  89       MetaspaceAux::allocated_used_bytes(),
  90       MetaspaceAux::reserved_bytes());
  91   const MetaspaceSizes data_space(
  92       MetaspaceAux::allocated_capacity_bytes(Metaspace::NonClassType),
  93       MetaspaceAux::allocated_used_bytes(Metaspace::NonClassType),
  94       MetaspaceAux::reserved_bytes(Metaspace::NonClassType));
  95   const MetaspaceSizes class_space(
  96       MetaspaceAux::allocated_capacity_bytes(Metaspace::ClassType),
  97       MetaspaceAux::allocated_used_bytes(Metaspace::ClassType),
  98       MetaspaceAux::reserved_bytes(Metaspace::ClassType));
  99 
 100   const MetaspaceChunkFreeListSummary& ms_chunk_free_list_summary =
 101     MetaspaceAux::chunk_free_list_summary(Metaspace::NonClassType);
 102   const MetaspaceChunkFreeListSummary& class_chunk_free_list_summary =
 103     MetaspaceAux::chunk_free_list_summary(Metaspace::ClassType);
 104 
 105   return MetaspaceSummary(MetaspaceGC::capacity_until_GC(), meta_space, data_space, class_space,
 106                           ms_chunk_free_list_summary, class_chunk_free_list_summary);
 107 }
 108 
 109 void CollectedHeap::print_heap_before_gc() {
 110   if (PrintHeapAtGC) {
 111     Universe::print_heap_before_gc();
 112   }
 113   if (_gc_heap_log != NULL) {
 114     _gc_heap_log->log_heap_before();
 115   }
 116 }
 117 
 118 void CollectedHeap::print_heap_after_gc() {
 119   if (PrintHeapAtGC) {
 120     Universe::print_heap_after_gc();
 121   }
 122   if (_gc_heap_log != NULL) {
 123     _gc_heap_log->log_heap_after();
 124   }
 125 }
 126 
 127 void CollectedHeap::register_nmethod(nmethod* nm) {
 128   assert_locked_or_safepoint(CodeCache_lock);
 129 }
 130 
 131 void CollectedHeap::unregister_nmethod(nmethod* nm) {
 132   assert_locked_or_safepoint(CodeCache_lock);
 133 }
 134 
 135 void CollectedHeap::trace_heap(GCWhen::Type when, GCTracer* gc_tracer) {
 136   const GCHeapSummary& heap_summary = create_heap_summary();
 137   gc_tracer->report_gc_heap_summary(when, heap_summary);
 138 
 139   const MetaspaceSummary& metaspace_summary = create_metaspace_summary();
 140   gc_tracer->report_metaspace_summary(when, metaspace_summary);
 141 }
 142 
 143 void CollectedHeap::trace_heap_before_gc(GCTracer* gc_tracer) {
 144   trace_heap(GCWhen::BeforeGC, gc_tracer);
 145 }
 146 
 147 void CollectedHeap::trace_heap_after_gc(GCTracer* gc_tracer) {
 148   trace_heap(GCWhen::AfterGC, gc_tracer);
 149 }
 150 
 151 // Memory state functions.
 152 
 153 
 154 CollectedHeap::CollectedHeap() : _n_par_threads(0)
 155 {
 156   const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));
 157   const size_t elements_per_word = HeapWordSize / sizeof(jint);
 158   _filler_array_max_size = align_object_size(filler_array_hdr_size() +
 159                                              max_len / elements_per_word);
 160