19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef RUNTIME_THREADHEAPSAMPLER_HPP
26 #define RUNTIME_THREADHEAPSAMPLER_HPP
27
28 #include "memory/allocation.hpp"
29
30 class ThreadHeapSampler {
31 private:
32 size_t _bytes_until_sample;
33 Thread* _thread;
34 // Cheap random number generator
35 static uint64_t _rnd;
36
37 void pick_next_sample(size_t diff = 0);
38 static int _enabled;
39 static int _monitoring_rate;
40
41 static void enable() { OrderAccess::release_store(&_enabled, 1); }
42 static void disable() { OrderAccess::release_store(&_enabled, 0); }
43
44 public:
45 ThreadHeapSampler() : _bytes_until_sample(0), _thread(NULL) {
46 _rnd = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(this));
47 if (_rnd == 0) {
48 _rnd = 1;
49 }
50 }
51
52 void set_thread(Thread* t) { _thread = t; }
53
54 size_t bytes_until_sample() { return _bytes_until_sample; }
55 void set_bytes_until_sample(size_t bytes) { _bytes_until_sample = bytes; }
56
57 void check_for_sampling(HeapWord* obj, size_t size_in_bytes, size_t bytes_allocated_before = 0);
58
59 static int enabled() { return OrderAccess::load_acquire(&_enabled); }
60 static void set_tlab_heap_sampling(int monitoring_rate);
61 };
62
63 #endif // SHARE_RUNTIME_THREADHEAPSAMPLER_HPP
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef RUNTIME_THREADHEAPSAMPLER_HPP
26 #define RUNTIME_THREADHEAPSAMPLER_HPP
27
28 #include "memory/allocation.hpp"
29
30 class ThreadHeapSampler {
31 private:
32 size_t _bytes_until_sample;
33 Thread* _thread;
34 // Cheap random number generator
35 static uint64_t _rnd;
36
37 void pick_next_sample(size_t diff = 0);
38 static int _enabled;
39 static int _sampling_rate;
40
41 static void enable() { OrderAccess::release_store(&_enabled, 1); }
42 static void disable() { OrderAccess::release_store(&_enabled, 0); }
43 void init_log_table();
44
45 public:
46 ThreadHeapSampler() : _bytes_until_sample(0), _thread(NULL) {
47 _rnd = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(this));
48 if (_rnd == 0) {
49 _rnd = 1;
50 }
51 init_log_table();
52 }
53
54 void set_thread(Thread* t) { _thread = t; }
55
56 size_t bytes_until_sample() { return _bytes_until_sample; }
57 void set_bytes_until_sample(size_t bytes) { _bytes_until_sample = bytes; }
58
59 void check_for_sampling(HeapWord* obj, size_t size_in_bytes, size_t bytes_allocated_before = 0);
60
61 static int enabled() { return OrderAccess::load_acquire(&_enabled); }
62 static void set_tlab_heap_sampling(int sampling_rate);
63 };
64
65 #endif // SHARE_RUNTIME_THREADHEAPSAMPLER_HPP
|