Подтвердить что ты не робот

Ошибка суппорта: CICompilerCount из 1 недействителен; должно быть не менее 2

У меня есть контрольный баллончик (1.0-бета-2):

import com.google.caliper.Benchmark;
import com.google.caliper.runner.CaliperMain;

public class MyBenchmark {

    @Benchmark public int a(int rep) {
        return 0;
    }

    public static void main(String[] args) {
        CaliperMain.main(MyBenchmark.class, args);
    }   
}

Я запускаю его из eclipse или из командной строки с помощью

mvn exec:java -Dexec.mainClass="com.google.caliper.runner.CaliperMain" -Dexec.args="MyBenchmark" 

в обоих случаях я получил ошибку:

ERROR: Trial failed to complete (its results will not be included in the run):
  The worker exited without producing data. It has likely crashed. Inspect /tmp/1427055470061-0/trial-1.log to see any worker output.

в этом файле я вижу:

Trial Number: 1
Trial Id: d663a0b5-55b4-43c3-97d8-93f14f436342
Experiment: {instrument=allocation, benchmarkMethod=a, vm=default, parameters={}}

[stderr] CICompilerCount of 1 is invalid; must be at least 2
[stderr] Error: Could not create the Java Virtual Machine.
[stderr] Error: A fatal exception has occurred. Program will exit.

ubuntu 14.04, java:

java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

любые идеи, как это исправить?

4b9b3361

Ответ 1

я нашел решение. флаг -XX:-TieredCompilation помогает. его можно использовать непосредственно в классе java-среды microbenchmark:

import com.google.caliper.api.VmOptions;

@VmOptions("-XX:-TieredCompilation")
public class MyMicrobenchmark {
...

Ответ 2

Это ошибка в суппорте. Он использует -XX:CICompilerCount=1 как аргумент JVM по умолчанию. Однако, когда включена многоуровневая компиляция, должно быть не менее 2 потоков компилятора (один для C1 и один для C2).

Попробуйте переопределить -XX:CICompilerCount вручную с большим значением.