RFR: 8338977: Parallel: Improve heap resizing heuristics [v13]
Zhengyu Gu
zgu at openjdk.org
Mon Jul 7 00:42:41 UTC 2025
On Sun, 6 Jul 2025 21:00:42 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:
>> 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?
>
> I don't see how I changed the semantics.
>
> On baseline, from `mem_allocate_work`:
>
>
> if (result != nullptr) {
> return result;
> }
>
> // If certain conditions hold, try allocating from the old gen.
> if (!is_tlab) {
> result = mem_allocate_old_gen(size);
> if (result != nullptr) {
> return result;
> }
> }
>
>
> and
>
>
> HeapWord* ParallelScavengeHeap::mem_allocate_old_gen(size_t size) {
> if (!should_alloc_in_eden(size)) {
> // Size is too big for eden.
> return allocate_old_gen_and_record(size);
> }
>
> return nullptr;
> }
>
>
> The original logic is essentially:
>
>
> if (result == nullptr && !is_tlab && !should_alloc_in_eden(size)) {
> // allocate in old-gen
> }
>
> which is the same as I put here.
Ah, okay.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25000#discussion_r2188761974
More information about the serviceability-dev
mailing list