Question about String.toUpperCase behaviour
Сергей Цыпанов
sergei.tsypanov at yandex.ru
Fri Nov 1 06:57:59 UTC 2019
> That doesn't remove the performance difference when the string is NOT upper
> case.
When the code is C2 compiler there is no significant difference, but in interpreter mode it's noticeable.
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(value = Mode.AverageTime)
public class StringEqualityBenchmark {
@Benchmark
public boolean equals(Data data) {
return data.getStr1().equals(data.getStr2());
}
@Benchmark
public boolean reference(Data data) {
return data.getStr1() == data.getStr2();
}
@State(Scope.Thread)
public static class Data {
@Param({"true", "false"})
private boolean latin;
private final String latinStr1 = "AZ";
private final String latinStr2 = latinStr1;
private final String russianStr1 = "АЯ";
private final String russianStr2 = russianStr1;
String getStr1() {
return latin ? latinStr1 : russianStr1;
}
String getStr2() {
return latin ? latinStr2 : russianStr2;
}
}
}
This benchmark run in interpreter mode yields following results:
Benchmark (latin) Mode Cnt Score Error Units
StringEqualityBenchmark.equals true avgt 50 212,916 ± 24,065 ns/op
StringEqualityBenchmark.reference true avgt 50 160,699 ± 8,948 ns/op
StringEqualityBenchmark.equals false avgt 50 178,818 ± 13,223 ns/op
StringEqualityBenchmark.reference false avgt 50 158,227 ± 8,704 ns/op
Regards,
Sergey Tsypanov
More information about the core-libs-dev
mailing list