< prev index next >
src/hotspot/share/gc/g1/g1ParScanThreadState.cpp
Print this page
rev 49680 : imported patch 6672778-partial-queue-trimming
rev 49681 : imported patch 6672778-refactoring
rev 49682 : [mq]: 6672778-stefanj-review
@@ -41,15 +41,19 @@
: _g1h(g1h),
_refs(g1h->task_queue(worker_id)),
_dcq(&g1h->dirty_card_queue_set()),
_ct(g1h->card_table()),
_closures(NULL),
- _hash_seed(17),
- _worker_id(worker_id),
- _tenuring_threshold(g1h->g1_policy()->tenuring_threshold()),
+ _plab_allocator(NULL),
_age_table(false),
+ _tenuring_threshold(g1h->g1_policy()->tenuring_threshold()),
_scanner(g1h, this),
+ _hash_seed(17),
+ _worker_id(worker_id),
+ _stack_drain_upper_threshold(GCDrainStackTargetSize * 2 + 1),
+ _stack_drain_lower_threshold(GCDrainStackTargetSize),
+ _trim_ticks(),
_old_gen_is_full(false)
{
// we allocate G1YoungSurvRateNumRegions plus one entries, since
// we "sacrifice" entry 0 to keep track of surviving bytes for
// non-young regions (where the age is -1)
@@ -136,20 +140,12 @@
#endif // ASSERT
void G1ParScanThreadState::trim_queue() {
StarTask ref;
do {
- // Drain the overflow stack first, so other threads can steal.
- while (_refs->pop_overflow(ref)) {
- if (!_refs->try_push_to_taskqueue(ref)) {
- dispatch_reference(ref);
- }
- }
-
- while (_refs->pop_local(ref)) {
- dispatch_reference(ref);
- }
+ // Fully drain the queue.
+ trim_queue_to_threshold(0);
} while (!_refs->is_empty());
}
HeapWord* G1ParScanThreadState::allocate_in_next_plab(InCSetState const state,
InCSetState* dest,
@@ -312,11 +308,11 @@
// We keep track of the next start index in the length field of
// the to-space object. The actual length can be found in the
// length field of the from-space object.
arrayOop(obj)->set_length(0);
oop* old_p = set_partial_array_mask(old);
- push_on_queue(old_p);
+ do_oop_partial_array(old_p);
} else {
HeapRegion* const to_region = _g1h->heap_region_containing(obj_ptr);
_scanner.set_region(to_region);
obj->oop_iterate_backwards(&_scanner);
}
< prev index next >