23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" |
26 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" |
27 #include "gc_implementation/g1/g1OopClosures.inline.hpp" |
27 #include "gc_implementation/g1/g1OopClosures.inline.hpp" |
|
28 #include "gc_implementation/g1/g1ParScanThreadState.hpp" |
28 |
29 |
29 G1ParCopyHelper::G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
30 G1ParCopyHelper::G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
30 G1ParClosureSuper(g1, par_scan_state), _scanned_klass(NULL), |
31 G1ParClosureSuper(g1, par_scan_state), _scanned_klass(NULL), |
31 _cm(_g1->concurrent_mark()) {} |
32 _cm(_g1->concurrent_mark()) {} |
32 |
33 |
|
34 G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1) : |
|
35 _g1(g1), _par_scan_state(NULL), _worker_id(UINT_MAX) { } |
|
36 |
33 G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
37 G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
34 _g1(g1), _par_scan_state(par_scan_state), |
38 _g1(g1), _par_scan_state(NULL), |
35 _worker_id(par_scan_state->queue_num()) { } |
39 _worker_id(UINT_MAX) { |
|
40 set_par_scan_thread_state(par_scan_state); |
|
41 } |
|
42 |
|
43 void G1ParClosureSuper::set_par_scan_thread_state(G1ParScanThreadState* par_scan_state) { |
|
44 assert(_par_scan_state == NULL, "_par_scan_state must only be set once"); |
|
45 assert(par_scan_state != NULL, "Must set par_scan_state to non-NULL."); |
|
46 |
|
47 _par_scan_state = par_scan_state; |
|
48 _worker_id = par_scan_state->queue_num(); |
|
49 |
|
50 assert(_worker_id < MAX2((uint)ParallelGCThreads, 1u), |
|
51 err_msg("The given worker id %u must be less than the number of threads %u", _worker_id, MAX2((uint)ParallelGCThreads, 1u))); |
|
52 } |