os::commit_memory takes a size_t `alignment_hint` as parameter. This parameter is used differently on different operating systems: it is ignored on all operating system except for Solaris. For Solaris, the hint is used for selecting the large page size. In a special case, the hint is interpreted as the *exact* page size.
This problem had previously been hidden because due to various alignments of heap sizes and generation sizes always made sure that we ended up with a alignment_hint of 4 MB by default, which also happens to be a valid page size.
The bug can be triggered by running:
java -Xms32m -Xmx128m -XX:LargePageSizeInBytes=256m -version