< prev index next >

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

Print this page
rev 56464 : 8231707: Improve Mutex inlining
Contributed-by: robbin.ehn@oracle.com, claes.redestad@oracle.com


  26 #include "classfile/systemDictionary.hpp"
  27 #include "gc/shared/allocTracer.hpp"
  28 #include "gc/shared/barrierSet.hpp"
  29 #include "gc/shared/collectedHeap.hpp"
  30 #include "gc/shared/collectedHeap.inline.hpp"
  31 #include "gc/shared/gcLocker.inline.hpp"
  32 #include "gc/shared/gcHeapSummary.hpp"
  33 #include "gc/shared/gcTrace.hpp"
  34 #include "gc/shared/gcTraceTime.inline.hpp"
  35 #include "gc/shared/gcVMOperations.hpp"
  36 #include "gc/shared/gcWhen.hpp"
  37 #include "gc/shared/memAllocator.hpp"
  38 #include "logging/log.hpp"
  39 #include "memory/metaspace.hpp"
  40 #include "memory/resourceArea.hpp"
  41 #include "memory/universe.hpp"
  42 #include "oops/instanceMirrorKlass.hpp"
  43 #include "oops/oop.inline.hpp"
  44 #include "runtime/handles.inline.hpp"
  45 #include "runtime/init.hpp"

  46 #include "runtime/thread.inline.hpp"
  47 #include "runtime/threadSMR.hpp"
  48 #include "runtime/vmThread.hpp"
  49 #include "services/heapDumper.hpp"
  50 #include "utilities/align.hpp"
  51 #include "utilities/copy.hpp"

  52 
  53 class ClassLoaderData;
  54 
  55 size_t CollectedHeap::_filler_array_max_size = 0;















  56 
  57 template <>
  58 void EventLogBase<GCMessage>::print(outputStream* st, GCMessage& m) {
  59   st->print_cr("GC heap %s", m.is_before ? "before" : "after");
  60   st->print_raw(m);
  61 }
  62 
  63 void GCHeapLog::log_heap(CollectedHeap* heap, bool before) {
  64   if (!should_log()) {
  65     return;
  66   }
  67 
  68   double timestamp = fetch_timestamp();
  69   MutexLocker ml(&_mutex, Mutex::_no_safepoint_check_flag);
  70   int index = compute_log_index();
  71   _records[index].thread = NULL; // Its the GC thread so it's not that interesting.
  72   _records[index].timestamp = timestamp;
  73   _records[index].data.is_before = before;
  74   stringStream st(_records[index].data.buffer(), _records[index].data.size());
  75 




  26 #include "classfile/systemDictionary.hpp"
  27 #include "gc/shared/allocTracer.hpp"
  28 #include "gc/shared/barrierSet.hpp"
  29 #include "gc/shared/collectedHeap.hpp"
  30 #include "gc/shared/collectedHeap.inline.hpp"
  31 #include "gc/shared/gcLocker.inline.hpp"
  32 #include "gc/shared/gcHeapSummary.hpp"
  33 #include "gc/shared/gcTrace.hpp"
  34 #include "gc/shared/gcTraceTime.inline.hpp"
  35 #include "gc/shared/gcVMOperations.hpp"
  36 #include "gc/shared/gcWhen.hpp"
  37 #include "gc/shared/memAllocator.hpp"
  38 #include "logging/log.hpp"
  39 #include "memory/metaspace.hpp"
  40 #include "memory/resourceArea.hpp"
  41 #include "memory/universe.hpp"
  42 #include "oops/instanceMirrorKlass.hpp"
  43 #include "oops/oop.inline.hpp"
  44 #include "runtime/handles.inline.hpp"
  45 #include "runtime/init.hpp"
  46 #include "runtime/mutexLocker.inline.hpp"
  47 #include "runtime/thread.inline.hpp"
  48 #include "runtime/threadSMR.hpp"
  49 #include "runtime/vmThread.hpp"
  50 #include "services/heapDumper.hpp"
  51 #include "utilities/align.hpp"
  52 #include "utilities/copy.hpp"
  53 #include "utilities/events.inline.hpp"
  54 
  55 class ClassLoaderData;
  56 
  57 size_t CollectedHeap::_filler_array_max_size = 0;
  58 
  59 class GCHeapLog : public EventLogBase<GCMessage> {
  60  private:
  61   void log_heap(CollectedHeap* heap, bool before);
  62 
  63  public:
  64   GCHeapLog() : EventLogBase<GCMessage>("GC Heap History", "gc") {}
  65 
  66   void log_heap_before(CollectedHeap* heap) {
  67     log_heap(heap, true);
  68   }
  69   void log_heap_after(CollectedHeap* heap) {
  70     log_heap(heap, false);
  71   }
  72 };
  73 
  74 template <>
  75 void EventLogBase<GCMessage>::print(outputStream* st, GCMessage& m) {
  76   st->print_cr("GC heap %s", m.is_before ? "before" : "after");
  77   st->print_raw(m);
  78 }
  79 
  80 void GCHeapLog::log_heap(CollectedHeap* heap, bool before) {
  81   if (!should_log()) {
  82     return;
  83   }
  84 
  85   double timestamp = fetch_timestamp();
  86   MutexLocker ml(&_mutex, Mutex::_no_safepoint_check_flag);
  87   int index = compute_log_index();
  88   _records[index].thread = NULL; // Its the GC thread so it's not that interesting.
  89   _records[index].timestamp = timestamp;
  90   _records[index].data.is_before = before;
  91   stringStream st(_records[index].data.buffer(), _records[index].data.size());
  92 


< prev index next >