Wither transparent huge pages for the heap?

Stefan Johansson stefan.johansson at oracle.com
Tue Nov 4 09:37:46 UTC 2025


Hi Peter,

This is a known issue [1], and we found the problem a bit to late for 
the fix to be included in the initial release of JDK 25. See the JBS 
issue [2] for more details.

The fix for the problem is scheduled to be released in JDK 25.0.2. The 
workaround (which is not optimal) is to configure the THP mode to 
'always' in:
/sys/kernel/mm/transparent_hugepage/enabled

This will make the heap be backed by transparent huge pages. When 
configured as 'always' you don't need the -XX:+UseTransparentHugePages 
flag. The logs won't reflect the actual page size used if I'm not 
mistaken, but you can use OS tools to verify that transparent huge pages 
are used for the heap.

Hope this helps,
Stefan

[1] https://www.oracle.com/java/technologies/javase/25-relnote-issues.html
[2] https://bugs.openjdk.org/browse/JDK-8366434

On 2025-11-03 21:55, Peter Kessler OS wrote:
>
> Between JDK-24 (24.0.2+12-54, dba 24.0.2) and JDK-25 (25.0.1+8-27, dba 
> 25.0.1), running an application on a machine with 64KiB system page 
> size and 512MiB transparent huge pages, I see this difference:
>
> $ "${OPENJDK_DIR}"/jdk-24.0.2/bin/java -showversion 
> -XX:+UseTransparentHugePages -Xmx12g -Xms12g -Xlog:pagesize=info 
> HelloWorld
>
> [0.001s][info][pagesize] Explicit hugepage support:
>
> [0.001s][info][pagesize] hugepage size: 2M
>
> [0.001s][info][pagesize] hugepage size: 512M
>
> [0.001s][info][pagesize] hugepage size: 16G
>
> [0.001s][info][pagesize] default hugepage size: 512M
>
> [0.001s][info][pagesize] Transparent hugepage (THP) support:
>
> [0.001s][info][pagesize] THP mode: always
>
> [0.001s][info][pagesize] THP pagesize: 512M
>
> [0.001s][info][pagesize] Shared memory transparent hugepage (THP) support:
>
> [0.001s][info][pagesize] Shared memory THP mode: never
>
> [0.001s][info][pagesize] JVM will attempt to prevent THPs in thread 
> stacks.
>
> [0.001s][info][pagesize] UseLargePages=1, UseTransparentHugePages=1
>
> [0.001s][info][pagesize] Large page support enabled. Usable page 
> sizes: 64k, 512M. Default large page size: 512M.
>
> [0.002s][info][pagesize] CodeHeap 'profiled nmethods':  min=2496K 
> max=118272K base=0x00004000108d0000 size=118272K page_size=64K
>
> [0.002s][info][pagesize] CodeHeap 'non-nmethods':  min=2496K max=9152K 
> base=0x0000400017c50000 size=9152K page_size=64K
>
> [0.002s][info][pagesize] CodeHeap 'non-profiled nmethods':  min=2496K 
> max=118336K base=0x0000400018540000 size=118336K page_size=64K
>
> [0.003s][info][pagesize] Heap:  min=12G max=12G 
> base=0x0000000500000000 size=12G page_size=512M
>
> [0.003s][info][pagesize] Block Offset Table: req_size=24M 
> req_page_size=64K base=0x0000400024440000 size=24M page_size=64K
>
> [0.003s][info][pagesize] Card Table: req_size=24M req_page_size=64K 
> base=0x0000400025c40000 size=24M page_size=64K
>
> [0.003s][info][pagesize] Mark Bitmap: req_size=192M req_page_size=64K 
> base=0x0000400027440000 size=192M page_size=64K
>
> openjdk version "24.0.2" 2025-07-15
>
> OpenJDK Runtime Environment (build 24.0.2+12-54)
>
> OpenJDK 64-Bit Server VM (build 24.0.2+12-54, mixed mode, sharing)
>
> Hello world!
>
> versus
>
> $ "${OPENJDK_DIR}"/jdk-25.0.1/bin/java -showversion 
> -XX:+UseTransparentHugePages -Xmx12g -Xms12g -Xlog:pagesize=info 
> HelloWorld
>
> [0.001s][info][pagesize] Explicit hugepage support:
>
> [0.001s][info][pagesize] hugepage size: 2M
>
> [0.001s][info][pagesize] hugepage size: 512M
>
> [0.001s][info][pagesize] hugepage size: 16G
>
> [0.001s][info][pagesize] default hugepage size: 512M
>
> [0.001s][info][pagesize] Transparent hugepage (THP) support:
>
> [0.001s][info][pagesize] THP mode: always
>
> [0.001s][info][pagesize] THP pagesize: 512M
>
> [0.001s][info][pagesize] Shared memory transparent hugepage (THP) support:
>
> [0.001s][info][pagesize] Shared memory THP mode: never
>
> [0.001s][info][pagesize] JVM will attempt to prevent THPs in thread 
> stacks.
>
> [0.001s][info][pagesize] UseLargePages=1, UseTransparentHugePages=1
>
> [0.001s][info][pagesize] Large page support enabled. Usable page 
> sizes: 64k, 512M. Default large page size: 512M.
>
> [0.002s][info][pagesize] CodeHeap 'profiled nmethods':  min=2496K 
> max=118272K base=0x00004000108d0000 size=118272K page_size=64K
>
> [0.002s][info][pagesize] CodeHeap 'non-nmethods':  min=2496K max=9152K 
> base=0x0000400017c50000 size=9152K page_size=64K
>
> [0.002s][info][pagesize] CodeHeap 'non-profiled nmethods':  min=2496K 
> max=118336K base=0x0000400018540000 size=118336K page_size=64K
>
> [0.003s][info][pagesize] Heap:  min=12G max=12G 
> base=0x0000000500000000 size=12G page_size=64K
>
> [0.003s][info][pagesize] Block Offset Table: req_size=24M 
> req_page_size=64K base=0x0000400024550000 size=24M page_size=64K
>
> [0.003s][info][pagesize] Card Table: req_size=24M req_page_size=64K 
> base=0x0000400025d50000 size=24M page_size=64K
>
> [0.003s][info][pagesize] Mark Bitmap: req_size=192M req_page_size=64K 
> base=0x0000400027550000 size=192M page_size=64K
>
> openjdk version "25.0.1" 2025-10-21
>
> OpenJDK Runtime Environment (build 25.0.1+8-27)
>
> OpenJDK 64-Bit Server VM (build 25.0.1+8-27, mixed mode, sharing)
>
> Hello world!
>
> Why am I not getting 512MiB pages for my heap in JDK-25, when I was 
> getting 512MiB pages for my heap in JDK-24?  Maybe more to the point: 
> How do I get transparent huge pages for my heap in JDK-25?
>
> ... peter
>
>
> _______________________________________________
> hotspot-gc-use mailing list
> hotspot-gc-use at openjdk.org
> https://mail.openjdk.org/mailman/listinfo/hotspot-gc-use
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-use/attachments/20251104/a8124cb4/attachment.htm>


More information about the hotspot-gc-use mailing list