On Wed, 18 Jun 2025 09:00:58 GMT, Albert Mingkun Yang <ay...@openjdk.org> wrote:

>> This patch refines Parallel's sizing strategy to improve overall memory 
>> management and performance.
>> 
>> The young generation layout has been reconfigured from the previous 
>> `eden-from/to` arrangement to a new `from/to-eden` order. This new layout 
>> facilitates young generation resizing, since we perform resizing after a 
>> successful young GC when all live objects are located at the beginning of 
>> the young generation. Previously, resizing was often inhibited by live 
>> objects residing in the middle of the young generation (from-space). The new 
>> layout is illustrated in `parallelScavengeHeap.hpp`.
>> 
>> `NumberSeq` is now used to track various runtime metrics, such as 
>> minor/major GC pause durations, promoted/survived bytes after a young GC, 
>> highest old generation usage, etc. This tracking primarily lives in 
>> `AdaptiveSizePolicy` and its subclass `PSAdaptiveSizePolicy`.
>> 
>> GC overhead checking, which was previously entangled with adaptive resizing 
>> logic, has been extracted and is now largely encapsulated in 
>> `ParallelScavengeHeap::is_gc_overhead_limit_reached`.
>> 
>> ## Performance evaluation
>> 
>> - SPECjvm2008-Compress shows ~8% improvement on Linux/AArch64 and Linux/x64 
>> (restoring the regression reported in 
>> [JDK-8332485](https://bugs.openjdk.org/browse/JDK-8332485) and 
>> [JDK-8338689](https://bugs.openjdk.org/browse/JDK-8338689)).
>> - Fixes the surprising behavior when using a non-default (smaller) value of 
>> `GCTimeRatio` with Heapothesys/Hyperalloc, as discussed in [this 
>> thread](https://mail.openjdk.org/pipermail/hotspot-gc-dev/2024-November/050146.html).
>> - Performance is mostly neutral across other tested benchmarks: **DaCapo**, 
>> **SPECjbb2005**, **SPECjbb2015**, **SPECjvm2008**, and **CacheStress**. The 
>> number of young-gc sometimes goes up a bit and the total heap-size decreases 
>> a bit, because promotion-size-to-old-gen goes down with the more effective 
>> eden/survivor-space resizing.
>> 
>> PS: I have opportunistically set the obsolete/expired version to ~~25/26~~ 
>> 26/27 for now. I will update them accordingly before merging.
>> 
>> Test: tier1-8
>
> Albert Mingkun Yang has updated the pull request with a new target base due 
> to a merge or a rebase. The pull request now contains 19 commits:
> 
>  - review
>  - Merge branch 'master' into pgc-size-policy
>  - merge
>  - version
>  - Merge branch 'master' into pgc-size-policy
>  - revert-aliases
>  - Merge branch 'master' into pgc-size-policy
>  - merge
>  - merge-fix
>  - merge
>  - ... and 9 more: https://git.openjdk.org/jdk/compare/2b94b70e...a21e5363

src/hotspot/share/gc/parallel/parallelArguments.cpp line 71:

> 69:   // True in product build, since tests using debug build often stress GC
> 70:   if (FLAG_IS_DEFAULT(UseGCOverheadLimit)) {
> 71:     FLAG_SET_DEFAULT(UseGCOverheadLimit, trueInProduct);

Given only Parallel honors `UseGCOverheadLimit`, you may want to set the 
default to `trueInProduct` in `gc_globals.hpp`

src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp line 381:

> 379:   HeapWord* result = young_gen()->expand_and_allocate(size);
> 380: 
> 381:   if (result == nullptr && !is_tlab && !should_alloc_in_eden(size)) {

I feel that you changed intent of `should_alloc_in_eden()`. I believe the 
original intent is to prevent allocating large objects in eden, and here, seems 
to prevent allocating small objects in old gen.

What benefits do you get?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25000#discussion_r2160152953
PR Review Comment: https://git.openjdk.org/jdk/pull/25000#discussion_r2160163706

Reply via email to