89 TaskQueueEntryChunk* cur = _chunk_list;
90 while (cur != NULL) {
91 guarantee(num_chunks <= _chunks_in_chunk_list, "Found " SIZE_FORMAT " oop chunks which is more than there should be", num_chunks);
92
93 for (size_t i = 0; i < EntriesPerChunk; ++i) {
94 if (cur->data[i].is_null()) {
95 break;
96 }
97 fn(cur->data[i]);
98 }
99 cur = cur->next;
100 num_chunks++;
101 }
102 }
103 #endif
104
105 // It scans an object and visits its children.
106 inline void G1CMTask::scan_task_entry(G1TaskQueueEntry task_entry) { process_grey_task_entry<true>(task_entry); }
107
108 inline void G1CMTask::push(G1TaskQueueEntry task_entry) {
109 assert(task_entry.is_array_slice() || _g1h->is_in_g1_reserved(task_entry.obj()), "invariant");
110 assert(task_entry.is_array_slice() || !_g1h->is_on_master_free_list(
111 _g1h->heap_region_containing(task_entry.obj())), "invariant");
112 assert(task_entry.is_array_slice() || !_g1h->is_obj_ill(task_entry.obj()), "invariant"); // FIXME!!!
113 assert(task_entry.is_array_slice() || _next_mark_bitmap->is_marked(cast_from_oop<HeapWord*>(task_entry.obj())), "invariant");
114
115 if (!_task_queue->push(task_entry)) {
116 // The local task queue looks full. We need to push some entries
117 // to the global stack.
118 move_entries_to_global_stack();
119
120 // this should succeed since, even if we overflow the global
121 // stack, we should have definitely removed some entries from the
122 // local queue. So, there must be space on it.
123 bool success = _task_queue->push(task_entry);
124 assert(success, "invariant");
125 }
126 }
127
128 inline bool G1CMTask::is_below_finger(oop obj, HeapWord* global_finger) const {
129 // If obj is above the global finger, then the mark bitmap scan
|
89 TaskQueueEntryChunk* cur = _chunk_list;
90 while (cur != NULL) {
91 guarantee(num_chunks <= _chunks_in_chunk_list, "Found " SIZE_FORMAT " oop chunks which is more than there should be", num_chunks);
92
93 for (size_t i = 0; i < EntriesPerChunk; ++i) {
94 if (cur->data[i].is_null()) {
95 break;
96 }
97 fn(cur->data[i]);
98 }
99 cur = cur->next;
100 num_chunks++;
101 }
102 }
103 #endif
104
105 // It scans an object and visits its children.
106 inline void G1CMTask::scan_task_entry(G1TaskQueueEntry task_entry) { process_grey_task_entry<true>(task_entry); }
107
108 inline void G1CMTask::push(G1TaskQueueEntry task_entry) {
109 assert(task_entry.is_array_slice() || _g1h->is_in_reserved(task_entry.obj()), "invariant");
110 assert(task_entry.is_array_slice() || !_g1h->is_on_master_free_list(
111 _g1h->heap_region_containing(task_entry.obj())), "invariant");
112 assert(task_entry.is_array_slice() || !_g1h->is_obj_ill(task_entry.obj()), "invariant"); // FIXME!!!
113 assert(task_entry.is_array_slice() || _next_mark_bitmap->is_marked(cast_from_oop<HeapWord*>(task_entry.obj())), "invariant");
114
115 if (!_task_queue->push(task_entry)) {
116 // The local task queue looks full. We need to push some entries
117 // to the global stack.
118 move_entries_to_global_stack();
119
120 // this should succeed since, even if we overflow the global
121 // stack, we should have definitely removed some entries from the
122 // local queue. So, there must be space on it.
123 bool success = _task_queue->push(task_entry);
124 assert(success, "invariant");
125 }
126 }
127
128 inline bool G1CMTask::is_below_finger(oop obj, HeapWord* global_finger) const {
129 // If obj is above the global finger, then the mark bitmap scan
|