Java JMH:初始堆大小无效
我用JMH测试我的程序性能。并且无法配置堆大小。我想知道为什么它不起作用 问题:Java JMH:初始堆大小无效,java,jvm,jvm-arguments,microbenchmark,jmh,Java,Jvm,Jvm Arguments,Microbenchmark,Jmh,我用JMH测试我的程序性能。并且无法配置堆大小。我想知道为什么它不起作用 问题: # Run progress: 0.00% complete, ETA 00:04:30 # VM invoker: /usr/lib/jvm/java-8-oracle/jre/bin/java # VM options: -Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M # Fork: 1 of 1 Invalid initial heap size: -Xms2
# Run progress: 0.00% complete, ETA 00:04:30
# VM invoker: /usr/lib/jvm/java-8-oracle/jre/bin/java
# VM options: -Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M
# Fork: 1 of 1
Invalid initial heap size: -Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
<forked VM failed with exit code 1>
public static void main(String... args) throws RunnerException, IOException {
Options opt = new OptionsBuilder()
.include(".*" + ArraySummatorBenchmarking.class.getSimpleName() + ".*")
.warmupIterations(5)
.measurementIterations(5)
.forks(1)
.jvmArgs("-Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M")
.build();
new Runner(opt).run();
}
jvmArgs
方法的情况下吸收idea堆大小设置# Run progress: 0.00% complete, ETA 00:04:30
# VM invoker: /usr/lib/jvm/java-8-oracle/jre/bin/java
# VM options: -Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M
# Fork: 1 of 1
Invalid initial heap size: -Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
<forked VM failed with exit code 1>
public static void main(String... args) throws RunnerException, IOException {
Options opt = new OptionsBuilder()
.include(".*" + ArraySummatorBenchmarking.class.getSimpleName() + ".*")
.warmupIterations(5)
.measurementIterations(5)
.forks(1)
.jvmArgs("-Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M")
.build();
new Runner(opt).run();
}
idea.vmoptions
-server
-Xms2056m
-Xmx2056m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=256m
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dawt.useSystemAAFontSettings=lcd
主要方法选项:
-Xms2048m -Xmx2048m -XX:MaxDirectMemorySize=512M
JMH用于启动分叉VM。此方法假定每个数组项有一个命令行标记,它将正确地转义标记内的空格
这意味着,当您将“-Xms2048m-Xmx2048m-XX:MaxDirectMemorySize=512M”字符串作为参数传递时,它将被视为一个恰好包含空格的单个参数,而不是三个单独的空格分隔参数
因此,在JMH中指定多个JVM参数的正确方法是为每个单独的参数使用单独的字符串值:
Options opt = new OptionsBuilder()
...
.jvmArgs("-Xms2048m", "-Xmx2048m", "-XX:MaxDirectMemorySize=512M")
...
您的计算机是否有足够的内存供多个VM使用,每个VM都有2G的初始堆?请尝试使用.jvmArgs(“-Xms2048m”、“-Xmx2048m”、“-XX:MaxDirectMemorySize=512M”)
(vararg每个选项有一个项目,而不是包含所有选项的单个字符串)。@OlegEstekhin您是对的。它起作用了!