8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP
26 #define SHARE_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP
27
28 #include "gc/shared/taskqueue.hpp"
29 #include "memory/allocation.hpp"
30 #include "utilities/stack.hpp"
31 #include "psParallelCompact.hpp"
32
33 class MutableSpace;
34 class PSOldGen;
35 class ParCompactionManager;
36 class ObjectStartArray;
37 class ParallelCompactData;
38 class ParMarkBitMap;
39
40 class ParCompactionManager : public CHeapObj<mtGC> {
41 friend class ParallelTaskTerminator;
42 friend class ParMarkBitMap;
43 friend class PSParallelCompact;
44 friend class CompactionWithStealingTask;
45 friend class UpdateAndFillClosure;
46 friend class RefProcTaskExecutor;
47 friend class PCRefProcTask;
48 friend class MarkFromRootsTask;
49 friend class UpdateDensePrefixAndCompactionTask;
50
51 public:
104 static PSOldGen* old_gen() { return _old_gen; }
105 static ObjectStartArray* start_array() { return _start_array; }
106 static OopTaskQueueSet* stack_array() { return _stack_array; }
107
108 static void initialize(ParMarkBitMap* mbm);
109
110 protected:
111 // Array of tasks. Needed by the ParallelTaskTerminator.
112 static RegionTaskQueueSet* region_array() { return _region_array; }
113 OverflowTaskQueue<oop, mtGC>* marking_stack() { return &_marking_stack; }
114
115 // Pushes onto the marking stack. If the marking stack is full,
116 // pushes onto the overflow stack.
117 void stack_push(oop obj);
118 // Do not implement an equivalent stack_pop. Deal with the
119 // marking stack and overflow stack directly.
120
121 public:
122 static size_t acquire_shadow_region(PSParallelCompact::RegionData* region_ptr);
123 static void release_shadow_region(size_t shadow_region);
124 static void enqueue_shadow_region(size_t shadow_region);
125 static void dequeue_shadow_region();
126 inline size_t shadow_record() { return _shadow_record; }
127 inline void set_shadow_record(size_t record) { _shadow_record = record; }
128 inline size_t next_shadow_record(size_t workers) { _shadow_record += workers; return shadow_record(); }
129
130 void reset_bitmap_query_cache() {
131 _last_query_beg = NULL;
132 _last_query_obj = NULL;
133 _last_query_ret = 0;
134 }
135
136 Action action() { return _action; }
137 void set_action(Action v) { _action = v; }
138
139 // Bitmap query support, cache last query and result
140 HeapWord* last_query_begin() { return _last_query_beg; }
141 oop last_query_object() { return _last_query_obj; }
142 size_t last_query_return() { return _last_query_ret; }
143
144 void set_last_query_begin(HeapWord *new_beg) { _last_query_beg = new_beg; }
145 void set_last_query_object(oop new_obj) { _last_query_obj = new_obj; }
|
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP
26 #define SHARE_GC_PARALLEL_PSCOMPACTIONMANAGER_HPP
27
28 #include "gc/parallel/psParallelCompact.hpp"
29 #include "gc/shared/taskqueue.hpp"
30 #include "memory/allocation.hpp"
31 #include "utilities/stack.hpp"
32
33 class MutableSpace;
34 class PSOldGen;
35 class ParCompactionManager;
36 class ObjectStartArray;
37 class ParallelCompactData;
38 class ParMarkBitMap;
39
40 class ParCompactionManager : public CHeapObj<mtGC> {
41 friend class ParallelTaskTerminator;
42 friend class ParMarkBitMap;
43 friend class PSParallelCompact;
44 friend class CompactionWithStealingTask;
45 friend class UpdateAndFillClosure;
46 friend class RefProcTaskExecutor;
47 friend class PCRefProcTask;
48 friend class MarkFromRootsTask;
49 friend class UpdateDensePrefixAndCompactionTask;
50
51 public:
104 static PSOldGen* old_gen() { return _old_gen; }
105 static ObjectStartArray* start_array() { return _start_array; }
106 static OopTaskQueueSet* stack_array() { return _stack_array; }
107
108 static void initialize(ParMarkBitMap* mbm);
109
110 protected:
111 // Array of tasks. Needed by the ParallelTaskTerminator.
112 static RegionTaskQueueSet* region_array() { return _region_array; }
113 OverflowTaskQueue<oop, mtGC>* marking_stack() { return &_marking_stack; }
114
115 // Pushes onto the marking stack. If the marking stack is full,
116 // pushes onto the overflow stack.
117 void stack_push(oop obj);
118 // Do not implement an equivalent stack_pop. Deal with the
119 // marking stack and overflow stack directly.
120
121 public:
122 static size_t acquire_shadow_region(PSParallelCompact::RegionData* region_ptr);
123 static void release_shadow_region(size_t shadow_region);
124
125 static void add_shadow_region(size_t shadow_region);
126 static void remove_all_shadow_regions();
127
128 inline size_t shadow_record() { return _shadow_record; }
129 inline void set_shadow_record(size_t record) { _shadow_record = record; }
130 inline size_t next_shadow_record(size_t workers) { _shadow_record += workers; return shadow_record(); }
131
132 void reset_bitmap_query_cache() {
133 _last_query_beg = NULL;
134 _last_query_obj = NULL;
135 _last_query_ret = 0;
136 }
137
138 Action action() { return _action; }
139 void set_action(Action v) { _action = v; }
140
141 // Bitmap query support, cache last query and result
142 HeapWord* last_query_begin() { return _last_query_beg; }
143 oop last_query_object() { return _last_query_obj; }
144 size_t last_query_return() { return _last_query_ret; }
145
146 void set_last_query_begin(HeapWord *new_beg) { _last_query_beg = new_beg; }
147 void set_last_query_object(oop new_obj) { _last_query_obj = new_obj; }
|