启用-XX:+AlwaysPreTouch
并启用大堆时,我的简单hello world程序需要花费10分钟以上的时间启动:
$ time java -Xmx1000G -Xms1000G -XX:+AlwaysPreTouch Test
Hello World!
real 10m9.330s
user 1m9.932s
sys 9m8.128s
这是意外的,因为pretouch是parallelized in Java 9,并且我正在使用Java11。我仍然看到pretouch仅使用一个线程。
为什么堆预修饰是串行而不是并行运行的?我是否需要配置其他选项以启用并行预润?我正在使用具有2 TB内存的80核心服务器。
Java版本:
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Debian-3bpo91)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Debian-3bpo91, mixed mode, sharing)
Java代码:
public class Test {
public static void main(String [] args) {
System.out.println("Hello World!");
}
}