Mercurial > hg > graal-compiler
comparison src/share/vm/gc_implementation/parNew/parOopClosures.hpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | a61af66fc99e |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
24 | 24 |
25 // Closures for ParNewGeneration | 25 // Closures for ParNewGeneration |
26 | 26 |
27 class ParScanThreadState; | 27 class ParScanThreadState; |
28 class ParNewGeneration; | 28 class ParNewGeneration; |
29 template<class E> class GenericTaskQueueSet; | 29 typedef OopTaskQueueSet ObjToScanQueueSet; |
30 typedef GenericTaskQueueSet<oop> ObjToScanQueueSet; | |
31 class ParallelTaskTerminator; | 30 class ParallelTaskTerminator; |
32 | 31 |
33 class ParScanClosure: public OopsInGenClosure { | 32 class ParScanClosure: public OopsInGenClosure { |
34 protected: | 33 protected: |
35 ParScanThreadState* _par_scan_state; | 34 ParScanThreadState* _par_scan_state; |
36 ParNewGeneration* _g; | 35 ParNewGeneration* _g; |
37 HeapWord* _boundary; | 36 HeapWord* _boundary; |
38 void do_oop_work(oop* p, | 37 template <class T> void inline par_do_barrier(T* p); |
39 bool gc_barrier, | 38 template <class T> void inline do_oop_work(T* p, |
40 bool root_scan); | 39 bool gc_barrier, |
41 | 40 bool root_scan); |
42 void par_do_barrier(oop* p); | 41 public: |
43 | |
44 public: | |
45 ParScanClosure(ParNewGeneration* g, ParScanThreadState* par_scan_state); | 42 ParScanClosure(ParNewGeneration* g, ParScanThreadState* par_scan_state); |
46 }; | 43 }; |
47 | 44 |
48 class ParScanWithBarrierClosure: public ParScanClosure { | 45 class ParScanWithBarrierClosure: public ParScanClosure { |
49 public: | 46 public: |
50 void do_oop(oop* p) { do_oop_work(p, true, false); } | |
51 void do_oop_nv(oop* p) { do_oop_work(p, true, false); } | |
52 ParScanWithBarrierClosure(ParNewGeneration* g, | 47 ParScanWithBarrierClosure(ParNewGeneration* g, |
53 ParScanThreadState* par_scan_state) : | 48 ParScanThreadState* par_scan_state) : |
54 ParScanClosure(g, par_scan_state) {} | 49 ParScanClosure(g, par_scan_state) {} |
50 virtual void do_oop(oop* p); | |
51 virtual void do_oop(narrowOop* p); | |
52 inline void do_oop_nv(oop* p); | |
53 inline void do_oop_nv(narrowOop* p); | |
55 }; | 54 }; |
56 | 55 |
57 class ParScanWithoutBarrierClosure: public ParScanClosure { | 56 class ParScanWithoutBarrierClosure: public ParScanClosure { |
58 public: | 57 public: |
59 ParScanWithoutBarrierClosure(ParNewGeneration* g, | 58 ParScanWithoutBarrierClosure(ParNewGeneration* g, |
60 ParScanThreadState* par_scan_state) : | 59 ParScanThreadState* par_scan_state) : |
61 ParScanClosure(g, par_scan_state) {} | 60 ParScanClosure(g, par_scan_state) {} |
62 void do_oop(oop* p) { do_oop_work(p, false, false); } | 61 virtual void do_oop(oop* p); |
63 void do_oop_nv(oop* p) { do_oop_work(p, false, false); } | 62 virtual void do_oop(narrowOop* p); |
63 inline void do_oop_nv(oop* p); | |
64 inline void do_oop_nv(narrowOop* p); | |
64 }; | 65 }; |
65 | 66 |
66 class ParRootScanWithBarrierTwoGensClosure: public ParScanClosure { | 67 class ParRootScanWithBarrierTwoGensClosure: public ParScanClosure { |
67 public: | 68 public: |
68 ParRootScanWithBarrierTwoGensClosure(ParNewGeneration* g, | 69 ParRootScanWithBarrierTwoGensClosure(ParNewGeneration* g, |
69 ParScanThreadState* par_scan_state) : | 70 ParScanThreadState* par_scan_state) : |
70 ParScanClosure(g, par_scan_state) {} | 71 ParScanClosure(g, par_scan_state) {} |
71 void do_oop(oop* p) { do_oop_work(p, true, true); } | 72 virtual void do_oop(oop* p); |
73 virtual void do_oop(narrowOop* p); | |
72 }; | 74 }; |
73 | 75 |
74 class ParRootScanWithoutBarrierClosure: public ParScanClosure { | 76 class ParRootScanWithoutBarrierClosure: public ParScanClosure { |
75 public: | 77 public: |
76 ParRootScanWithoutBarrierClosure(ParNewGeneration* g, | 78 ParRootScanWithoutBarrierClosure(ParNewGeneration* g, |
77 ParScanThreadState* par_scan_state) : | 79 ParScanThreadState* par_scan_state) : |
78 ParScanClosure(g, par_scan_state) {} | 80 ParScanClosure(g, par_scan_state) {} |
79 void do_oop(oop* p) { do_oop_work(p, false, true); } | 81 virtual void do_oop(oop* p); |
82 virtual void do_oop(narrowOop* p); | |
80 }; | 83 }; |
81 | 84 |
82 class ParScanWeakRefClosure: public ScanWeakRefClosure { | 85 class ParScanWeakRefClosure: public ScanWeakRefClosure { |
83 protected: | 86 protected: |
84 ParScanThreadState* _par_scan_state; | 87 ParScanThreadState* _par_scan_state; |
85 public: | 88 template <class T> inline void do_oop_work(T* p); |
89 public: | |
86 ParScanWeakRefClosure(ParNewGeneration* g, | 90 ParScanWeakRefClosure(ParNewGeneration* g, |
87 ParScanThreadState* par_scan_state); | 91 ParScanThreadState* par_scan_state); |
88 void do_oop(oop* p); | 92 virtual void do_oop(oop* p); |
89 void do_oop_nv(oop* p); | 93 virtual void do_oop(narrowOop* p); |
94 inline void do_oop_nv(oop* p); | |
95 inline void do_oop_nv(narrowOop* p); | |
90 }; | 96 }; |
91 | 97 |
92 class ParEvacuateFollowersClosure: public VoidClosure { | 98 class ParEvacuateFollowersClosure: public VoidClosure { |
99 private: | |
93 ParScanThreadState* _par_scan_state; | 100 ParScanThreadState* _par_scan_state; |
94 ParScanThreadState* par_scan_state() { return _par_scan_state; } | 101 ParScanThreadState* par_scan_state() { return _par_scan_state; } |
95 | 102 |
96 // We want to preserve the specific types here (rather than "OopClosure") | 103 // We want to preserve the specific types here (rather than "OopClosure") |
97 // for later de-virtualization of do_oop calls. | 104 // for later de-virtualization of do_oop calls. |
119 ObjToScanQueueSet* _task_queues; | 126 ObjToScanQueueSet* _task_queues; |
120 ObjToScanQueueSet* task_queues() { return _task_queues; } | 127 ObjToScanQueueSet* task_queues() { return _task_queues; } |
121 | 128 |
122 ParallelTaskTerminator* _terminator; | 129 ParallelTaskTerminator* _terminator; |
123 ParallelTaskTerminator* terminator() { return _terminator; } | 130 ParallelTaskTerminator* terminator() { return _terminator; } |
124 | 131 public: |
125 public: | |
126 ParEvacuateFollowersClosure( | 132 ParEvacuateFollowersClosure( |
127 ParScanThreadState* par_scan_state_, | 133 ParScanThreadState* par_scan_state_, |
128 ParScanWithoutBarrierClosure* to_space_closure_, | 134 ParScanWithoutBarrierClosure* to_space_closure_, |
129 ParScanWithBarrierClosure* old_gen_closure_, | 135 ParScanWithBarrierClosure* old_gen_closure_, |
130 ParRootScanWithoutBarrierClosure* to_space_root_closure_, | 136 ParRootScanWithoutBarrierClosure* to_space_root_closure_, |
131 ParNewGeneration* par_gen_, | 137 ParNewGeneration* par_gen_, |
132 ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure_, | 138 ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure_, |
133 ObjToScanQueueSet* task_queues_, | 139 ObjToScanQueueSet* task_queues_, |
134 ParallelTaskTerminator* terminator_); | 140 ParallelTaskTerminator* terminator_); |
135 void do_void(); | 141 virtual void do_void(); |
136 }; | 142 }; |