Back in 2015 a "Programming Language Performance Comparison"
http://www.hildstrom.com/projects/langcomp/index.html
On my old i5-3330 these times for unchanged programs —
$ gcc -O3 -o test-c-gcc test.c
$ time ./test-c-gcc 100
real 1m36.599s
$ time /opt/src/jdk-16/bin/java test 100
real 4m49.166s
Add one Java "final" keyword —
$ time /opt/src/jdk-16/bin/java test 100
real 4m49.166s
final int array_length = 100000000;
$ time /opt/src/jdk-16/bin/java test 100
real 2m58.618s
Or make array_length dependent on a runtime value —
int array_length = 1000000 * iterations;
$ gcc -O3 -o test-c-gcc test.c
$ time ./test-c-gcc 100
real 4m48.034s
$ time /opt/src/jdk-16/bin/java test 100
real 4m49.567s
Should we expect measurements to be that brittle?