< prev index next >
src/share/vm/gc/g1/vm_operations_g1.cpp
Print this page
rev 9413 : [mq]: JDK-8130265_3
*** 147,167 ****
_pause_succeeded =
g1h->do_collection_pause_at_safepoint(_target_pause_time_ms);
if (_pause_succeeded && _word_size > 0) {
// An allocation had been requested.
! _result = g1h->attempt_allocation_at_safepoint(_word_size,
! allocation_context(),
! true /* expect_null_cur_alloc_region */);
} else {
assert(_result == NULL, "invariant");
if (!_pause_succeeded) {
// Another possible reason reason for the pause to not be successful
// is that, again, the GC locker is active (and has become active
// since the prologue was executed). In this case we should retry
// the pause after waiting for the GC locker to become inactive.
_should_retry_gc = true;
}
}
}
void VM_G1IncCollectionPause::doit_epilogue() {
--- 147,171 ----
_pause_succeeded =
g1h->do_collection_pause_at_safepoint(_target_pause_time_ms);
if (_pause_succeeded && _word_size > 0) {
// An allocation had been requested.
! _result = g1h->satisfy_failed_allocation(_word_size, allocation_context(), &_pause_succeeded);
} else {
assert(_result == NULL, "invariant");
if (!_pause_succeeded) {
// Another possible reason reason for the pause to not be successful
// is that, again, the GC locker is active (and has become active
// since the prologue was executed). In this case we should retry
// the pause after waiting for the GC locker to become inactive.
_should_retry_gc = true;
+ } else {
+ // if this gc has been triggered by the GCLocker, we did not try to allocate.
+ // However, we should start a full GC, if we didn't free any memory.
+ if (g1h->evacuation_failed()) {
+ g1h->do_full_collection(true /* clear_all_soft_refs */);
+ }
}
}
}
void VM_G1IncCollectionPause::doit_epilogue() {
< prev index next >