22 * questions.
23 *
24 */
25
26 #ifndef RUNTIME_THREADHEAPSAMPLER_HPP
27 #define RUNTIME_THREADHEAPSAMPLER_HPP
28
29 #include "memory/allocation.hpp"
30
31 class ThreadHeapSampler {
32 private:
33 size_t _bytes_until_sample;
34 // Cheap random number generator
35 static uint64_t _rnd;
36
37 void pick_next_geometric_sample();
38 void pick_next_sample(size_t overflowed_bytes = 0);
39 static int _enabled;
40 static int _sampling_interval;
41
42 // Used for assertion mode to determine if there is a path to a TLAB slow path
43 // without a collector present.
44 size_t _collectors_present;
45
46 static void init_log_table();
47
48 public:
49 ThreadHeapSampler() : _bytes_until_sample(0) {
50 _rnd = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(this));
51 if (_rnd == 0) {
52 _rnd = 1;
53 }
54
55 _collectors_present = 0;
56 }
57
58 size_t bytes_until_sample() { return _bytes_until_sample; }
59 void set_bytes_until_sample(size_t bytes) { _bytes_until_sample = bytes; }
60
61 void check_for_sampling(oop obj, size_t size_in_bytes, size_t bytes_allocated_before);
62
63 static int enabled();
64 static void enable();
65 static void disable();
66
67 static void set_sampling_interval(int sampling_interval);
68 static int get_sampling_interval();
69 };
70
71 #endif // SHARE_RUNTIME_THREADHEAPSAMPLER_HPP
|
22 * questions.
23 *
24 */
25
26 #ifndef RUNTIME_THREADHEAPSAMPLER_HPP
27 #define RUNTIME_THREADHEAPSAMPLER_HPP
28
29 #include "memory/allocation.hpp"
30
31 class ThreadHeapSampler {
32 private:
33 size_t _bytes_until_sample;
34 // Cheap random number generator
35 static uint64_t _rnd;
36
37 void pick_next_geometric_sample();
38 void pick_next_sample(size_t overflowed_bytes = 0);
39 static int _enabled;
40 static int _sampling_interval;
41
42 static void init_log_table();
43
44 public:
45 ThreadHeapSampler() : _bytes_until_sample(0) {
46 _rnd = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(this));
47 if (_rnd == 0) {
48 _rnd = 1;
49 }
50 }
51
52 size_t bytes_until_sample() { return _bytes_until_sample; }
53 void set_bytes_until_sample(size_t bytes) { _bytes_until_sample = bytes; }
54
55 void check_for_sampling(oop obj, size_t size_in_bytes, size_t bytes_allocated_before);
56
57 static int enabled();
58 static void enable();
59 static void disable();
60
61 static void set_sampling_interval(int sampling_interval);
62 static int get_sampling_interval();
63 };
64
65 #endif // SHARE_RUNTIME_THREADHEAPSAMPLER_HPP
|