8231249: Shenandoah: GC retries are too aggressive for tests that expect OOME

Reviewed-by: rkennke
This commit is contained in:
Aleksey Shipilev 2019-09-23 16:24:32 +02:00
parent 6bc9833f65
commit e965dca90e

View File

@ -809,22 +809,12 @@ HeapWord* ShenandoahHeap::allocate_memory(ShenandoahAllocRequest& req) {
// way later after GC happened, only to fail the second allocation, because
// other threads have already depleted the free storage. In this case, a better
// strategy is to try again, as long as GC makes progress.
//
// Then, we need to make sure the allocation was retried after at least one
// Full GC, which means we want to try more than ShenandoahFullGCThreshold times.
size_t tries = 0;
while (result == NULL && _progress_last_gc.is_set()) {
tries++;
control_thread()->handle_alloc_failure(req.size());
result = allocate_memory_under_lock(req, in_new_region);
}
while (result == NULL && tries <= ShenandoahFullGCThreshold) {
tries++;
control_thread()->handle_alloc_failure(req.size());
result = allocate_memory_under_lock(req, in_new_region);
if (result == NULL) {
do {
control_thread()->handle_alloc_failure(req.size());
result = allocate_memory_under_lock(req, in_new_region);
} while (result == NULL && _progress_last_gc.is_set());
}
} else {