< prev index next >
src/share/vm/gc/shenandoah/shenandoahConcurrentMark.inline.hpp
Print this page
rev 13130 : Interleave partial GCs with concurrent GCs.
*** 204,214 ****
}
void do_buffer(void** buffer, size_t size) {
for (size_t i = 0; i < size; ++i) {
oop* p = (oop*) &buffer[i];
! ShenandoahConcurrentMark::mark_through_ref<oop, RESOLVE, false>(p, _heap, _queue, NULL);
}
}
};
inline bool ShenandoahConcurrentMark::try_draining_satb_buffer(SCMObjToScanQueue *q, SCMTask &task) {
--- 204,214 ----
}
void do_buffer(void** buffer, size_t size) {
for (size_t i = 0; i < size; ++i) {
oop* p = (oop*) &buffer[i];
! ShenandoahConcurrentMark::mark_through_ref<oop, RESOLVE>(p, _heap, _queue);
}
}
};
inline bool ShenandoahConcurrentMark::try_draining_satb_buffer(SCMObjToScanQueue *q, SCMTask &task) {
*** 216,227 ****
SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
bool had_refs = satb_mq_set.apply_closure_to_completed_buffer(&cl);
return had_refs && try_queue(q, task);
}
! template<class T, UpdateRefsMode UPDATE_REFS, bool UPDATE_MATRIX>
! inline void ShenandoahConcurrentMark::mark_through_ref(T *p, ShenandoahHeap* heap, SCMObjToScanQueue* q, ShenandoahConnectionMatrix* conn_matrix) {
T o = oopDesc::load_heap_oop(p);
if (! oopDesc::is_null(o)) {
oop obj = oopDesc::decode_heap_oop_not_null(o);
switch (UPDATE_REFS) {
case NONE:
--- 216,227 ----
SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
bool had_refs = satb_mq_set.apply_closure_to_completed_buffer(&cl);
return had_refs && try_queue(q, task);
}
! template<class T, UpdateRefsMode UPDATE_REFS>
! inline void ShenandoahConcurrentMark::mark_through_ref(T *p, ShenandoahHeap* heap, SCMObjToScanQueue* q) {
T o = oopDesc::load_heap_oop(p);
if (! oopDesc::is_null(o)) {
oop obj = oopDesc::decode_heap_oop_not_null(o);
switch (UPDATE_REFS) {
case NONE:
*** 247,262 ****
if (UPDATE_REFS != CONCURRENT || !oopDesc::is_null(obj)) {
assert(!oopDesc::is_null(obj), "Must not be null here");
assert(heap->is_in(obj), "We shouldn't be calling this on objects not in the heap: " PTR_FORMAT, p2i(obj));
assert(oopDesc::bs()->is_safe(obj), "Only mark objects in from-space");
- if (UPDATE_MATRIX) {
- if (heap->is_in_reserved(p)) { // Could also be in CLD, when marking through metadata.
- conn_matrix->set_connected(p, obj);
- }
- }
-
if (heap->mark_next(obj)) {
log_develop_trace(gc, marking)("Marked obj: " PTR_FORMAT, p2i((HeapWord*) obj));
bool pushed = q->push(SCMTask(obj));
assert(pushed, "overflow queue should always succeed pushing");
--- 247,256 ----
< prev index next >