RFR: 8343704: Bad GC parallelism with processing Cleaner queues [v7]
Aleksey Shipilev
shade at openjdk.org
Thu Nov 14 13:59:40 UTC 2024
On Thu, 14 Nov 2024 13:28:46 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:
> This seem to handle excessive allocations when churning around an empty list by keeping the head node always allocated.
Realistically, the list is almost never empty: there is a `Cleaner` instance itself recorded in the list. The only (?) state when the list is fully empty is when `Cleaner` itself is also dead, AFAICS. We pre-allocate head node for the implementation simplicity: if `head` is always available, we don't need to null-check it, for example.
> I wonder if there is any worth adding some hysteresis if it churns around a multiple of the `NODE_CAPACITY`, by for example pooling one node.
I don't think we should care about this case: it seems the rare benefit does not outweigh the cost for common case? The goal for this implementation is to avoid wasting more space than necessary. Caching a node would take another bunch of KBs per Cleaner, at very least.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/22043#issuecomment-2476419160
More information about the core-libs-dev
mailing list