MaxRAMPercentage vs a hardcoded -Xmx, -XX:-UseContainerSupport, the ActiveProcessorCount lie, and which diagnostic flags are worth leaving on in prod, verified in real Docker containers on JDK 25 and JDK 27. Co-Authored-By: Claude Sonnet 5 <[email protected]>
28 lines
1.6 KiB
Plaintext
28 lines
1.6 KiB
Plaintext
$ docker run -d --memory=1g --name hdr -v $PWD/docker/headersize.jar:/headersize.jar \
|
|
--entrypoint java flags-demo:<tag> [extra flags] -cp /headersize.jar HeaderSizeDemo 2000000
|
|
$ docker exec hdr jcmd 1 GC.class_histogram | grep -E "Pair|Total"
|
|
|
|
--- JDK 25, default (UseCompactObjectHeaders=false), flags-demo:jdk25-jdk ---
|
|
1: 2000000 48000000 HeaderSizeDemo$Pair
|
|
273: 1 24 java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$MethodHandlePair ([email protected])
|
|
Total 2030279 57368512
|
|
|
|
--- JDK 25, -XX:+UseCompactObjectHeaders ---
|
|
1: 2000000 32000000 HeaderSizeDemo$Pair
|
|
300: 1 16 java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$MethodHandlePair ([email protected])
|
|
Total 2030283 41272056
|
|
|
|
--- JDK 27, default (UseCompactObjectHeaders=true), flags-demo:jdk27 ---
|
|
1: 2000000 32000000 HeaderSizeDemo$Pair
|
|
317: 1 16 java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$MethodHandlePair (java.base@27)
|
|
Total 2030937 41320144
|
|
|
|
--- JDK 27, -XX:-UseCompactObjectHeaders ---
|
|
1: 2000000 48000000 HeaderSizeDemo$Pair
|
|
282: 1 24 java.lang.invoke.StringConcatFactory$InlineHiddenClassStrategy$MethodHandlePair (java.base@27)
|
|
Total 2031092 57425040
|
|
|
|
2,000,000 instances of a 2-int object: 48,000,000 bytes (24 bytes each) with the old header,
|
|
32,000,000 bytes (16 bytes each) compact. 33% smaller per instance, reproduced symmetrically
|
|
in both directions on both JDKs.
|