Created
June 27, 2015 02:19
-
-
Save amaembo/461e663e696ad9f15447 to your computer and use it in GitHub Desktop.
CharsTest: comparison of different ways to create the stream of chars from String
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.concurrent.TimeUnit; | |
import java.util.stream.*; | |
import java.util.*; | |
import java.nio.*; | |
import org.openjdk.jmh.infra.Blackhole; | |
import org.openjdk.jmh.annotations.*; | |
@Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) | |
@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS) | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.MICROSECONDS) | |
@Fork(3) | |
@State(Scope.Benchmark) | |
public class CharsTest { | |
@Param({ "100", "10000", "1000000" }) | |
private int n; | |
private String input; | |
@Setup | |
public void setUp() { | |
Random r = new Random(1); | |
input = collect(r.ints(n, 'A', 'z')); | |
} | |
private String collect(IntStream is) { | |
return is.collect(StringBuilder::new, (sb, c) -> sb.append((char)c), StringBuilder::append).toString(); | |
} | |
@Benchmark | |
public void baseline(Blackhole bh) { | |
bh.consume(input.toUpperCase()); | |
} | |
@Benchmark | |
public void byChar(Blackhole bh) { | |
char[] cc = input.toCharArray(); | |
for(int i=0; i<cc.length; i++) | |
cc[i] = Character.toUpperCase(cc[i]); | |
bh.consume(new String(cc)); | |
} | |
@Benchmark | |
public void chars(Blackhole bh) { | |
bh.consume(collect(input.chars().map(Character::toUpperCase))); | |
} | |
@Benchmark | |
public void charsParallel(Blackhole bh) { | |
bh.consume(collect(input.chars().parallel().map(Character::toUpperCase))); | |
} | |
@Benchmark | |
public void charBuffer(Blackhole bh) { | |
bh.consume(collect(CharBuffer.wrap(input).chars().map(Character::toUpperCase))); | |
} | |
@Benchmark | |
public void charBufferParallel(Blackhole bh) { | |
bh.consume(collect(CharBuffer.wrap(input).chars().parallel().map(Character::toUpperCase))); | |
} | |
@Benchmark | |
public void range(Blackhole bh) { | |
bh.consume(collect(IntStream.range(0, input.length()).map(input::charAt).map(Character::toUpperCase))); | |
} | |
@Benchmark | |
public void rangeParallel(Blackhole bh) { | |
bh.consume(collect(IntStream.range(0, input.length()).parallel().map(input::charAt).map(Character::toUpperCase))); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# jdk 1.8.0.20 | |
Benchmark (n) Mode Cnt Score Error Units | |
CharsTest.baseline 100 avgt 30 0.412 ± 0.001 us/op | |
CharsTest.baseline 10000 avgt 30 84.778 ± 1.354 us/op | |
CharsTest.baseline 1000000 avgt 30 9186.889 ± 133.972 us/op | |
CharsTest.byChar 100 avgt 30 0.199 ± 0.001 us/op | |
CharsTest.byChar 10000 avgt 30 42.792 ± 3.074 us/op | |
CharsTest.byChar 1000000 avgt 30 5967.103 ± 10.452 us/op | |
CharsTest.charBuffer 100 avgt 30 0.909 ± 0.003 us/op | |
CharsTest.charBuffer 10000 avgt 30 122.368 ± 0.590 us/op | |
CharsTest.charBuffer 1000000 avgt 30 13064.490 ± 110.556 us/op | |
CharsTest.charBufferParallel 100 avgt 30 7.705 ± 0.185 us/op | |
CharsTest.charBufferParallel 10000 avgt 30 54.727 ± 1.054 us/op | |
CharsTest.charBufferParallel 1000000 avgt 30 4751.401 ± 20.009 us/op | |
CharsTest.chars 100 avgt 30 1.279 ± 0.004 us/op | |
CharsTest.chars 10000 avgt 30 156.943 ± 4.228 us/op | |
CharsTest.chars 1000000 avgt 30 12766.115 ± 379.475 us/op | |
CharsTest.charsParallel 100 avgt 30 8.515 ± 0.232 us/op | |
CharsTest.charsParallel 10000 avgt 30 55.489 ± 0.518 us/op | |
CharsTest.charsParallel 1000000 avgt 30 13858.503 ± 79.425 us/op | |
CharsTest.range 100 avgt 30 1.388 ± 0.004 us/op | |
CharsTest.range 10000 avgt 30 172.070 ± 0.692 us/op | |
CharsTest.range 1000000 avgt 30 16798.184 ± 351.728 us/op | |
CharsTest.rangeParallel 100 avgt 30 8.221 ± 0.053 us/op | |
CharsTest.rangeParallel 10000 avgt 30 70.552 ± 0.928 us/op | |
CharsTest.rangeParallel 1000000 avgt 30 5733.689 ± 59.871 us/op | |
# jdk 1.8.0.45 | |
Benchmark (n) Mode Cnt Score Error Units | |
CharsTest.baseline 100 avgt 30 0.278 ± 0.002 us/op | |
CharsTest.baseline 10000 avgt 30 33.408 ± 0.713 us/op | |
CharsTest.baseline 1000000 avgt 30 6310.867 ± 8.996 us/op | |
CharsTest.byChar 100 avgt 30 0.191 ± 0.001 us/op | |
CharsTest.byChar 10000 avgt 30 43.189 ± 3.465 us/op | |
CharsTest.byChar 1000000 avgt 30 5993.404 ± 10.930 us/op | |
CharsTest.charBuffer 100 avgt 30 1.002 ± 0.045 us/op | |
CharsTest.charBuffer 10000 avgt 30 121.837 ± 1.051 us/op | |
CharsTest.charBuffer 1000000 avgt 30 12851.197 ± 92.170 us/op | |
CharsTest.charBufferParallel 100 avgt 30 5.573 ± 0.066 us/op | |
CharsTest.charBufferParallel 10000 avgt 30 51.410 ± 0.592 us/op | |
CharsTest.charBufferParallel 1000000 avgt 30 4725.644 ± 56.381 us/op | |
CharsTest.chars 100 avgt 30 1.305 ± 0.008 us/op | |
CharsTest.chars 10000 avgt 30 165.347 ± 0.223 us/op | |
CharsTest.chars 1000000 avgt 30 12317.120 ± 186.215 us/op | |
CharsTest.charsParallel 100 avgt 30 5.748 ± 0.080 us/op | |
CharsTest.charsParallel 10000 avgt 30 58.408 ± 0.686 us/op | |
CharsTest.charsParallel 1000000 avgt 30 14193.598 ± 122.229 us/op | |
CharsTest.range 100 avgt 30 1.184 ± 0.015 us/op | |
CharsTest.range 10000 avgt 30 174.745 ± 0.806 us/op | |
CharsTest.range 1000000 avgt 30 17055.355 ± 415.258 us/op | |
CharsTest.rangeParallel 100 avgt 30 5.685 ± 0.126 us/op | |
CharsTest.rangeParallel 10000 avgt 30 67.383 ± 0.788 us/op | |
CharsTest.rangeParallel 1000000 avgt 30 5788.407 ± 34.844 us/op | |
# jdk 1.9.0b55 | |
Benchmark (n) Mode Cnt Score Error Units | |
CharsTest.baseline 100 avgt 30 0.236 ± 0.001 us/op | |
CharsTest.baseline 10000 avgt 30 41.151 ± 2.510 us/op | |
CharsTest.baseline 1000000 avgt 30 5872.789 ± 14.646 us/op | |
CharsTest.byChar 100 avgt 30 0.190 ± 0.001 us/op | |
CharsTest.byChar 10000 avgt 30 48.322 ± 2.458 us/op | |
CharsTest.byChar 1000000 avgt 30 5979.789 ± 10.822 us/op | |
CharsTest.charBuffer 100 avgt 30 0.945 ± 0.037 us/op | |
CharsTest.charBuffer 10000 avgt 30 122.498 ± 0.272 us/op | |
CharsTest.charBuffer 1000000 avgt 30 13294.550 ± 70.847 us/op | |
CharsTest.charBufferParallel 100 avgt 30 5.716 ± 0.044 us/op | |
CharsTest.charBufferParallel 10000 avgt 30 52.828 ± 0.323 us/op | |
CharsTest.charBufferParallel 1000000 avgt 30 4843.258 ± 30.411 us/op | |
CharsTest.chars 100 avgt 30 0.726 ± 0.064 us/op | |
CharsTest.chars 10000 avgt 30 105.297 ± 0.285 us/op | |
CharsTest.chars 1000000 avgt 30 11077.694 ± 18.687 us/op | |
CharsTest.charsParallel 100 avgt 30 5.659 ± 0.077 us/op | |
CharsTest.charsParallel 10000 avgt 30 48.544 ± 1.357 us/op | |
CharsTest.charsParallel 1000000 avgt 30 4269.837 ± 19.214 us/op | |
CharsTest.range 100 avgt 30 1.428 ± 0.008 us/op | |
CharsTest.range 10000 avgt 30 180.103 ± 0.967 us/op | |
CharsTest.range 1000000 avgt 30 16711.417 ± 235.215 us/op | |
CharsTest.rangeParallel 100 avgt 30 5.848 ± 0.069 us/op | |
CharsTest.rangeParallel 10000 avgt 30 69.596 ± 0.708 us/op | |
CharsTest.rangeParallel 1000000 avgt 30 5621.781 ± 29.522 us/op |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment