28 #include "gc/g1/g1ConcurrentMarkBitMap.hpp"
29 #include "gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp"
30 #include "gc/g1/g1HeapVerifier.hpp"
31 #include "gc/g1/g1RegionMarkStatsCache.hpp"
32 #include "gc/g1/heapRegionSet.hpp"
33 #include "gc/shared/taskqueue.hpp"
34 #include "gc/shared/verifyOption.hpp"
35 #include "gc/shared/workgroup.hpp"
36 #include "memory/allocation.hpp"
37 #include "utilities/compilerWarnings.hpp"
38
39 class ConcurrentGCTimer;
40 class G1ConcurrentMarkThread;
41 class G1CollectedHeap;
42 class G1CMOopClosure;
43 class G1CMTask;
44 class G1ConcurrentMark;
45 class G1OldTracer;
46 class G1RegionToSpaceMapper;
47 class G1SurvivorRegions;
48
49 PRAGMA_DIAG_PUSH
50 // warning C4522: multiple assignment operators specified
51 PRAGMA_DISABLE_MSVC_WARNING(4522)
52
53 // This is a container class for either an oop or a continuation address for
54 // mark stack entries. Both are pushed onto the mark stack.
55 class G1TaskQueueEntry {
56 private:
57 void* _holder;
58
59 static const uintptr_t ArraySliceBit = 1;
60
61 G1TaskQueueEntry(oop obj) : _holder(obj) {
62 assert(_holder != NULL, "Not allowed to set NULL task queue element");
63 }
64 G1TaskQueueEntry(HeapWord* addr) : _holder((void*)((uintptr_t)addr | ArraySliceBit)) { }
65 public:
66 G1TaskQueueEntry(const G1TaskQueueEntry& other) { _holder = other._holder; }
67 G1TaskQueueEntry() : _holder(NULL) { }
|
28 #include "gc/g1/g1ConcurrentMarkBitMap.hpp"
29 #include "gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp"
30 #include "gc/g1/g1HeapVerifier.hpp"
31 #include "gc/g1/g1RegionMarkStatsCache.hpp"
32 #include "gc/g1/heapRegionSet.hpp"
33 #include "gc/shared/taskqueue.hpp"
34 #include "gc/shared/verifyOption.hpp"
35 #include "gc/shared/workgroup.hpp"
36 #include "memory/allocation.hpp"
37 #include "utilities/compilerWarnings.hpp"
38
39 class ConcurrentGCTimer;
40 class G1ConcurrentMarkThread;
41 class G1CollectedHeap;
42 class G1CMOopClosure;
43 class G1CMTask;
44 class G1ConcurrentMark;
45 class G1OldTracer;
46 class G1RegionToSpaceMapper;
47 class G1SurvivorRegions;
48 class ThreadClosure;
49
50 PRAGMA_DIAG_PUSH
51 // warning C4522: multiple assignment operators specified
52 PRAGMA_DISABLE_MSVC_WARNING(4522)
53
54 // This is a container class for either an oop or a continuation address for
55 // mark stack entries. Both are pushed onto the mark stack.
56 class G1TaskQueueEntry {
57 private:
58 void* _holder;
59
60 static const uintptr_t ArraySliceBit = 1;
61
62 G1TaskQueueEntry(oop obj) : _holder(obj) {
63 assert(_holder != NULL, "Not allowed to set NULL task queue element");
64 }
65 G1TaskQueueEntry(HeapWord* addr) : _holder((void*)((uintptr_t)addr | ArraySliceBit)) { }
66 public:
67 G1TaskQueueEntry(const G1TaskQueueEntry& other) { _holder = other._holder; }
68 G1TaskQueueEntry() : _holder(NULL) { }
|