Discussion: How to get to single object header layout

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Thu Feb 27 21:19:44 UTC 2025



On 2/27/25 3:32 PM, Thomas Stüfe wrote:
> Hi Coleen,
>
> I did benchmarks end of last year, and found the numbers for Lilliput1 
> to be encouraging. This was on the very-close-to-release version of 
> Lilliput. I will brush up the results or repeat the measurements when 
> I find time, but in short, I found in SpecJBB G1 pause time 
> reduction of ~20% and CPU cache misses down by 15-20%. Live set size 
> reduction of ~17%. Benchmark scores were also better.

Thomas, this is good.  Please post these results in the JDK issue, and 
what you measured and what sort of hardware configurations when you have 
a chance.

Thanks,
Coleen

>
> I remember that Romans results were a bit smaller, but I usually test 
> on older hardware that may benefit more from more efficient CPU/memory 
> use.
>
> Cheers, Thomas
>
>
> On Thu, Feb 27, 2025 at 9:02 PM <coleen.phillimore at oracle.com> wrote:
>
>
>     Roman,
>
>     Thank you for sending out the plan for getting to a single object
>     header
>     layout.  See below:
>
>     On 2/26/25 1:52 PM, Kennke, Roman wrote:
>     > (2nd attempt at sending this. If you receive the other attempt,
>     please ignore it.)
>     >
>     > This is a follow-up to discussions that we had at the OpenJDK
>     Committers Workshop earlier this month. I have been asked to come
>     up with a detailed schedule of how I envision to make compact
>     object headers aka Project Lilliput the default and one and only
>     header layout in HotSpot, and post it here for wider discussion.
>     The goal is to get to a consensus and prepare the various HotSpot
>     contributors for what may come and when. In particular, I am aware
>     that other, potentially conflicting changes are in the pipeline
>     too (looking at Valhalla, possibly other projects, too?), which we
>     should coordinate, not only in terms of code, but also in terms of
>     reviewer/testing resources.
>     >
>     > We agreed at the OCW that we should make the current
>     8-byte-headers the default object header layout first, and only
>     then build 4-byte-headers on top of that. We also agreed that we
>     want as few flags permutations as possible (if it were me, I would
>     vote for having no new flags at all, and have new implementations
>     replace old implementations, but I can see the operational
>     usefulness of having a fallback available if something unexpected
>     goes wrong.)
>     >
>     > Many of the proposed changes are ‘only’ various progressions of
>     flags moving from new/experimental to non-experimental to default
>     to deprecated and obsoleted. The bulk of code changes would be in
>     JDK 27, when Lilliput 2 hits the repos (which isn't as scary as
>     Lilliput 1, which replaced the whole locking subsystem), and the
>     current 12-byte headers are removed.
>     >
>     > Please let me know what you think, how we can make this work,
>     and especially whatever concerns you may have.
>     >
>     > JDK 25:
>     > - 8350272: Deprecate UseCompressedClassPointers for removal
>     > - 8350457: Support Compact Object Headers as product option
>
>     I filed 8350457 to collect information that we need to decide to move
>     UseCompactObjectHeaders out of Experimental mode.  See the bug for
>     more
>     details: https://bugs.openjdk.org/browse/JDK-8350457
>
>     One of the first and most important things we need is to show that
>     there
>     is a performance improvement either in throughput or density for this
>     change.  I assigned this to you, but I'm also currently in the
>     process
>     of running our internal benchmarks to determine the impact of this
>     change and I'll post analysis there when I have more details. Also we
>     need some fresh performance results that you are seeing.  If the
>     option
>     is a product option, we need to tell people why they want to use this
>     option.  There may be some performance regressions for some
>     applications
>     with UCCP so we need to show to overall improvements in other
>     types of
>     applications, and or mitigate the regressions.
>
>     The remaining tasks for JDK 26 and beyond depend on what we find as a
>     result of this step, including L2, whose performance numbers would be
>     interesting to see as well.
>
>     Thank you,
>     Coleen
>
>     >
>     > JDK 26:
>     > - 8346011: [Lilliput] Compact Full-GC Forwarding (required for
>     UCCP removal, pre-req for L2)
>     > - Obsolete +/-UseCompressedClassPointers
>     > - Make +UseCompactObjectHeaders on-by-default
>     > - Deprecate -UseCompactObjectHeaders
>     >
>     > JDK 27:
>     > - Obsolete -UseCompactObjectHeaders
>     > - 8320761: [Lilliput] Implement compact identity hashcode
>     (alternative code path to L1, under new experimental flag, e.g.
>     +/-UseTinyObjectHeaders)
>     > - 8347710: [Lilliput] Implement 4 byte headers (alternative code
>     path to L1, under new experimental flag, e.g. +/-UseTinyObjectHeaders)
>     >
>     > JDK 28:
>     > - Make +/-UseTinyObjectHeaders non-experimental
>     >
>     > JDK 29:
>     > - Make +UseTinyObjectHeaders on-by-default
>     > - Deprecate -UseTinyObjectHeaders
>     >
>     > JDK 30:
>     > - Obsolete -UseTinyObjectHeaders
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-dev/attachments/20250227/710a4302/attachment-0001.htm>


More information about the hotspot-dev mailing list