java8 parallelStream性能测试
生活随笔
收集整理的這篇文章主要介紹了
java8 parallelStream性能测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
序
本文主要研究下parallelStream的性能。
測試1
@BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) @Warmup(iterations = 5, time = 3, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 20, time = 3, timeUnit = TimeUnit.SECONDS) @Fork(1) @State(Scope.Benchmark) public class StreamBenchTest {List<String> data = new ArrayList<>();@Setuppublic void init() {// preparefor(int i=0;i<100;i++){data.add(UUID.randomUUID().toString());}}@TearDownpublic void destory() {// destory}@Benchmarkpublic void benchStream(){data.stream().forEach(e -> {e.getBytes();try {Thread.sleep(10);} catch (InterruptedException e1) {e1.printStackTrace();}});}@Benchmarkpublic void benchParallelStream(){data.parallelStream().forEach(e -> {e.getBytes();try {Thread.sleep(10);} catch (InterruptedException e1) {e1.printStackTrace();}});}public static void main(String[] args) throws RunnerException {Options opt = new OptionsBuilder().include(".*" +StreamBenchTest.class.getSimpleName()+ ".*").forks(1).build();new Runner(opt).run();}}parallelStream線程數
默認是Runtime.getRuntime().availableProcessors() - 1,這里為7
運行結果
# Run complete. Total time: 00:02:44Benchmark Mode Cnt Score Error Units StreamBenchTest.benchParallelStream avgt 20 155868805.437 ± 1509175.840 ns/op StreamBenchTest.benchStream avgt 20 1147570372.950 ± 6138494.414 ns/op測試2
將數據data改為30,同時sleep改為100
Benchmark Mode Cnt Score Error Units StreamBenchTest.benchParallelStream avgt 20 414230854.631 ± 725294.455 ns/op StreamBenchTest.benchStream avgt 20 3107250608.500 ± 4805037.628 ns/op可以發現sleep越長,parallelStream優勢越明顯。
小結
parallelStream在阻塞場景下優勢更明顯,其線程池個數默認為 Runtime.getRuntime().availableProcessors() - 1,如果需修改則需設置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8
doc
- ForkJoinPool的commonPool相關參數配置
轉載于:https://my.oschina.net/go4it/blog/1604238
總結
以上是生活随笔為你收集整理的java8 parallelStream性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1月8日学习内容整理:JS的作用域和作用
- 下一篇: 带参数接口访问问题