src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp

changeset 9885
8e875c964f41
parent 9867
150ab470bf7f
     1.1 --- a/src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp	Fri Sep 27 13:23:32 2019 +0800
     1.2 +++ b/src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp	Wed Oct 09 16:11:58 2019 +0800
     1.3 @@ -28,7 +28,10 @@
     1.4  #include "memory/allocation.hpp"
     1.5  #include "jfr/utilities/jfrTime.hpp"
     1.6  
     1.7 +typedef u8 traceid;
     1.8 +
     1.9  class BoolObjectClosure;
    1.10 +class JfrStackTrace;
    1.11  class OopClosure;
    1.12  class ObjectSample;
    1.13  class ObjectSampler;
    1.14 @@ -40,11 +43,13 @@
    1.15  // making sure the samples are evenly distributed as
    1.16  // new entries are added and removed.
    1.17  class ObjectSampler : public CHeapObj<mtTracing> {
    1.18 +  friend class EventEmitter;
    1.19 +  friend class JfrRecorderService;
    1.20    friend class LeakProfiler;
    1.21 -  friend class ObjectSampleCheckpoint;
    1.22    friend class StartOperation;
    1.23    friend class StopOperation;
    1.24 -  friend class EmitEventOperation;
    1.25 +  friend class ObjectSampleCheckpoint;
    1.26 +  friend class WriteObjectSampleStacktrace;
    1.27   private:
    1.28    SamplePriorityQueue* _priority_queue;
    1.29    SampleList* _list;
    1.30 @@ -52,20 +57,33 @@
    1.31    size_t _total_allocated;
    1.32    size_t _threshold;
    1.33    size_t _size;
    1.34 -  volatile int _tryLock;
    1.35    bool _dead_samples;
    1.36  
    1.37 +  // Lifecycle
    1.38    explicit ObjectSampler(size_t size);
    1.39    ~ObjectSampler();
    1.40 +  static bool create(size_t size);
    1.41 +  static bool is_created();
    1.42 +  static ObjectSampler* sampler();
    1.43 +  static void destroy();
    1.44  
    1.45 -  void add(HeapWord* object, size_t size, JavaThread* thread);
    1.46 +  // For operations that require exclusive access (non-safepoint)
    1.47 +  static ObjectSampler* acquire();
    1.48 +  static void release();
    1.49 +
    1.50 +  // Stacktrace
    1.51 +  static void fill_stacktrace(JfrStackTrace* stacktrace, JavaThread* thread);
    1.52 +  traceid stacktrace_id(const JfrStackTrace* stacktrace, JavaThread* thread);
    1.53 +
    1.54 +  // Sampling
    1.55 +  static void sample(HeapWord* object, size_t size, JavaThread* thread);
    1.56 +  void add(HeapWord* object, size_t size, traceid thread_id, JfrStackTrace* stacktrace, JavaThread* thread);
    1.57 +  void scavenge();
    1.58    void remove_dead(ObjectSample* sample);
    1.59 -  void scavenge();
    1.60  
    1.61    // Called by GC
    1.62 -  void oops_do(BoolObjectClosure* is_alive, OopClosure* f);
    1.63 +  static void oops_do(BoolObjectClosure* is_alive, OopClosure* f);
    1.64  
    1.65 - public:
    1.66    const ObjectSample* item_at(int index) const;
    1.67    ObjectSample* item_at(int index);
    1.68    int item_count() const;

mercurial