27 #include "gc/g1/g1CollectorPolicy.hpp"
28 #include "gc/g1/g1CollectionSet.hpp"
29 #include "gc/g1/g1YoungRemSetSamplingThread.hpp"
30 #include "gc/g1/heapRegion.inline.hpp"
31 #include "gc/g1/heapRegionRemSet.hpp"
32 #include "gc/g1/suspendibleThreadSet.hpp"
33 #include "runtime/mutexLocker.hpp"
34
35 G1YoungRemSetSamplingThread::G1YoungRemSetSamplingThread() :
36 ConcurrentGCThread(),
37 _monitor(Mutex::nonleaf,
38 "G1YoungRemSetSamplingThread monitor",
39 true,
40 Monitor::_safepoint_check_never) {
41 set_name("G1 Young RemSet Sampling");
42 create_and_start();
43 }
44
45 void G1YoungRemSetSamplingThread::sleep_before_next_cycle() {
46 MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
47 if (!_should_terminate) {
48 uintx waitms = G1ConcRefinementServiceIntervalMillis; // 300, really should be?
49 _monitor.wait(Mutex::_no_safepoint_check_flag, waitms);
50 }
51 }
52
53 void G1YoungRemSetSamplingThread::run_service() {
54 double vtime_start = os::elapsedVTime();
55
56 while (!_should_terminate) {
57 sample_young_list_rs_lengths();
58
59 if (os::supports_vtime()) {
60 _vtime_accum = (os::elapsedVTime() - vtime_start);
61 } else {
62 _vtime_accum = 0.0;
63 }
64
65 sleep_before_next_cycle();
66 }
67 }
68
69 void G1YoungRemSetSamplingThread::stop_service() {
70 MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
71 _monitor.notify();
72 }
73
74 void G1YoungRemSetSamplingThread::sample_young_list_rs_lengths() {
75 SuspendibleThreadSetJoiner sts;
76 G1CollectedHeap* g1h = G1CollectedHeap::heap();
|
27 #include "gc/g1/g1CollectorPolicy.hpp"
28 #include "gc/g1/g1CollectionSet.hpp"
29 #include "gc/g1/g1YoungRemSetSamplingThread.hpp"
30 #include "gc/g1/heapRegion.inline.hpp"
31 #include "gc/g1/heapRegionRemSet.hpp"
32 #include "gc/g1/suspendibleThreadSet.hpp"
33 #include "runtime/mutexLocker.hpp"
34
35 G1YoungRemSetSamplingThread::G1YoungRemSetSamplingThread() :
36 ConcurrentGCThread(),
37 _monitor(Mutex::nonleaf,
38 "G1YoungRemSetSamplingThread monitor",
39 true,
40 Monitor::_safepoint_check_never) {
41 set_name("G1 Young RemSet Sampling");
42 create_and_start();
43 }
44
45 void G1YoungRemSetSamplingThread::sleep_before_next_cycle() {
46 MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
47 if (!should_terminate()) {
48 uintx waitms = G1ConcRefinementServiceIntervalMillis; // 300, really should be?
49 _monitor.wait(Mutex::_no_safepoint_check_flag, waitms);
50 }
51 }
52
53 void G1YoungRemSetSamplingThread::run_service() {
54 double vtime_start = os::elapsedVTime();
55
56 while (!should_terminate()) {
57 sample_young_list_rs_lengths();
58
59 if (os::supports_vtime()) {
60 _vtime_accum = (os::elapsedVTime() - vtime_start);
61 } else {
62 _vtime_accum = 0.0;
63 }
64
65 sleep_before_next_cycle();
66 }
67 }
68
69 void G1YoungRemSetSamplingThread::stop_service() {
70 MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
71 _monitor.notify();
72 }
73
74 void G1YoungRemSetSamplingThread::sample_young_list_rs_lengths() {
75 SuspendibleThreadSetJoiner sts;
76 G1CollectedHeap* g1h = G1CollectedHeap::heap();
|