2015-03-22 14 views
13

i kalınlık kriter (1.0-beta-2) sahiptir: i got her iki durumda dakaliper hatası: CICompilerCount of 1 geçersiz; olmalı, en az 2

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

:

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 veya komut satırından çalıştırmak bir hata:

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. 

bu dosyada i bakın:

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) 

herhangi bir fikir nasıl düzeltilir?

cevap

14

Bir çözüm buldum. bayrak -XX:-TieredCompilation yardımcı olur.

import com.google.caliper.api.VmOptions; 

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

Bkz geçersiz görünüyor: gibi microbenchmark java sınıfta doğrudan kullanılabilmektedir JVM'nin varsayılan davranışı ve kıyaslama ana fikrini kırar: üretimde farklı bir şey çalıştırırsanız, bir şeyi ölçmenin hiçbir anlamı yoktur. – apangin

+2

Ben şahsen Kaliper yerine [JMH] (http://openjdk.java.net/projects/code-tools/jmh/) kullanmanızı öneririz. Bu araç JVM mühendisleri tarafından geliştirilmiş ve kullanılmıştır. – apangin

+0

ilginç görünüyor, teşekkürler! – piotrek

4

Kaliper'de bir hata var. Varsayılan bir JVM bağımsız değişkeni olarak -XX:CICompilerCount=1 kullanır. Ancak, Katmanlı derleme açık olduğunda, en az 2 derleyici iş parçacığı olmalıdır (biri C1 ve diğeri C2 için).

Daha büyük bir değerle -XX:CICompilerCount'u geçersiz kılmayı deneyin.

+0

kumpas bu ayar – piotrek

+1

önemli ölçüde değişir çünkü bu iyi değil https://github.com/mrflip/caliper/issues/1 – centic