RFR (T) 8231395: Backout JDK-8231249
Thomas Schatzl
thomas.schatzl at oracle.com
Tue Sep 24 08:44:55 UTC 2019
Hi,
On 24.09.19 09:43, Aleksey Shipilev wrote:
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8231395
>
> JDK-8231249 caused some testing failures, notably in:
> gc/shenandoah/oom/TestClassLoaderLeak.java failed (JDK-8231389)
> gc/shenandoah/TestAllocHumongousFragment.java
>
> The reason is that those tests expect us to eventually come to Full GC, and JDK-8231249 prevents
> that. It requires more comprehensive fix. Let's backout the bad fix meanwhile.
>
> Fix, produced by "hg backout"
looks like a legit backout :) Ship it.
Thomas
>
> diff -r ef8c8cf9256a src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Fri Sep 20 10:28:48 2019 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Sep 24 09:42:57 2019 +0200
> @@ -810,10 +810,20 @@
> // other threads have already depleted the free storage. In this case, a better
> // strategy is to try again, as long as GC makes progress.
> -
> - 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());
> + //
> + // 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);
> }
>
>
> Testing: hotspot_gc_shenandoah
>
More information about the hotspot-gc-dev
mailing list