@ForEachInt-command 只为每个int-value 执行测试,例如代码:
import org.jbenchx.annotations.*;
public class Main {
@Bench
public int[] doSomething(@ForEachInt({ 20, 10, 30, 10 }) int size) {
return new int[size];
}
}
给出以下输出:
Initializing Benchmarking Framework...
Running on Windows 7 6.1
Max heap = 3784310784 System Benchmark = 0,83ns
Performing 4 benchmarking tasks..
[0] Main.doSomething(20)****!********** 16,3ns
[1] Main.doSomething(10)********** 16,6ns
[2] Main.doSomething(30)****!************ 17,1ns
[3] Main.doSomething(10).*.***.*** 16,5ns
Success.
可以看到,@ForEachInt-statement 有四个int-values,因此执行了四个测试。 http://iquadrat.github.io/jbenchx/ 显示了一个类似的示例。
你的代码有两个缺陷:
- 代码无法编译,因为在
createkey()-方法内部调用的generateKeyPair()-方法没有定义(定义的generateKeyPair(int)-方法有一个int-参数,因此具有不同的签名)。
-
@ForEachInt-command 必须在标有@Bench-annotatioan 的方法中使用,即createKey()。
修改代码如下:
import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jbenchx.annotations.Bench;
import org.jbenchx.annotations.ForEachInt;
public class keyGen {
private KeyPair generateKeyPair(int size) throws GeneralSecurityException {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGen.initialize(size);
return keyPairGen.generateKeyPair();
}
@Bench
public Object createkey(@ForEachInt({ 112, 196, 256 }) int size) throws GeneralSecurityException {
Security.addProvider(new BouncyCastleProvider());
KeyPair RSA = generateKeyPair(size);
return RSA;
}
}
那么输出变成:
Initializing Benchmarking Framework...
Running on Windows 7 6.1
Max heap = 3784310784 System Benchmark = 0,84ns
Performing 3 benchmarking tasks..
[0] keyGen.createkey(112)!!!!!!!!!!.!.!!!!!!!!!!!!.!!.!!!..!!!*!!..*..*...* 952us
[1] keyGen.createkey(196)!!!!!..*....*...* 1.94ms
[2] keyGen.createkey(256)!!!!!!!!*.*!!*.*.*!.*.*!*.**.****. 2.88ms
Success.