Concise way to compare runtime of alternate implementations
vyazelenko at yahoo.com
vyazelenko at yahoo.com
Thu Feb 26 07:16:11 UTC 2015
Hi Keith,
If benchmarks are the same for every impl then you can simply add parameter which will tell which impl to instantiate. Then inside the @Setup method you'll create target instance based on that parameter:
@Param
private ImplType type;
@Setup(Level.Trial)
public void setUp() {
switch(implType):
case Impl1:
impl=Utils.myClass1();
break;
case Impl2:
impl=Utils.myClass2();
}
@Benchmark
public boolean contains_val() {
return impl.contains(val);
}
This approach requires that your impls have common interface by which you'll refer to them in the benchmarks.
Regards,
Dmitry
Sent from my iPhone
> On Feb 26, 2015, at 07:20, Aleksey Shipilev <aleksey.shipilev at oracle.com> wrote:
>
> Hi Keith,
>
>> On 02/26/2015 04:28 AM, Keith Newman wrote:
>> I have two implementations of the same custom class:
>>
>> private List<String> a = Util.myCustomClass();
>> private List<String> b = Util2.myCustomClass();
>>
>> and would like to compare the runtime of each of their functions (which
>> all have the same name). Currently, my benchmark tests look like:
>>
>> @Benchmark
>> public boolean contains_val_a() {
>> return a.contains(val);
>> }
>>
>> @Benchmark
>> public boolean contains_val_b() {
>> return b.contains(val);
>> }
>>
>> And I repeat this parallel structure for 25 or so different functions
>> (writing each function twice because of the two implementations). Is
>> there a way for me to only write the 25 @Benchmark functions and have
>> jmh run each function for both implementations?
>
> No, because JMH cannot guess what inputs to put into the method.
> Figuring out what inputs are sensible to benchmark with depends on the
> nature of the object under test, and I don't think it could be / should
> be specified within the harness.
>
> Thanks,
> -Aleksey.
>
>
More information about the jmh-dev
mailing list