22 *
23 */
24
25 #include "precompiled.hpp"
26
27 #include "gc/g1/g1ParallelCleaning.hpp"
28 #if INCLUDE_JVMCI
29 #include "jvmci/jvmci.hpp"
30 #endif
31
32 #if INCLUDE_JVMCI
33 JVMCICleaningTask::JVMCICleaningTask() :
34 _cleaning_claimed(0) {
35 }
36
37 bool JVMCICleaningTask::claim_cleaning_task() {
38 if (_cleaning_claimed) {
39 return false;
40 }
41
42 return Atomic::cmpxchg(1, &_cleaning_claimed, 0) == 0;
43 }
44
45 void JVMCICleaningTask::work(bool unloading_occurred) {
46 // One worker will clean JVMCI metadata handles.
47 if (unloading_occurred && EnableJVMCI && claim_cleaning_task()) {
48 JVMCI::do_unloading(unloading_occurred);
49 }
50 }
51 #endif // INCLUDE_JVMCI
52
53 G1ParallelCleaningTask::G1ParallelCleaningTask(BoolObjectClosure* is_alive,
54 uint num_workers,
55 bool unloading_occurred,
56 bool resize_dedup_table) :
57 AbstractGangTask("G1 Parallel Cleaning"),
58 _unloading_occurred(unloading_occurred),
59 _string_dedup_task(is_alive, NULL, resize_dedup_table),
60 _code_cache_task(num_workers, is_alive, unloading_occurred),
61 JVMCI_ONLY(_jvmci_cleaning_task() COMMA)
62 _klass_cleaning_task() {
|
22 *
23 */
24
25 #include "precompiled.hpp"
26
27 #include "gc/g1/g1ParallelCleaning.hpp"
28 #if INCLUDE_JVMCI
29 #include "jvmci/jvmci.hpp"
30 #endif
31
32 #if INCLUDE_JVMCI
33 JVMCICleaningTask::JVMCICleaningTask() :
34 _cleaning_claimed(0) {
35 }
36
37 bool JVMCICleaningTask::claim_cleaning_task() {
38 if (_cleaning_claimed) {
39 return false;
40 }
41
42 return Atomic::cmpxchg(&_cleaning_claimed, 0, 1) == 0;
43 }
44
45 void JVMCICleaningTask::work(bool unloading_occurred) {
46 // One worker will clean JVMCI metadata handles.
47 if (unloading_occurred && EnableJVMCI && claim_cleaning_task()) {
48 JVMCI::do_unloading(unloading_occurred);
49 }
50 }
51 #endif // INCLUDE_JVMCI
52
53 G1ParallelCleaningTask::G1ParallelCleaningTask(BoolObjectClosure* is_alive,
54 uint num_workers,
55 bool unloading_occurred,
56 bool resize_dedup_table) :
57 AbstractGangTask("G1 Parallel Cleaning"),
58 _unloading_occurred(unloading_occurred),
59 _string_dedup_task(is_alive, NULL, resize_dedup_table),
60 _code_cache_task(num_workers, is_alive, unloading_occurred),
61 JVMCI_ONLY(_jvmci_cleaning_task() COMMA)
62 _klass_cleaning_task() {
|