测试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 data = new ArrayList<>();

@Setup

public void init() {

// prepare

for(int i=0;i<100;i++){

data.add(UUID.randomUUID().toString());

}

}

@TearDown

public void destory() {

// destory

}

@Benchmark

public void benchStream(){

data.stream().forEach(e -> {

e.getBytes();

try {

Thread.sleep(10);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

});

}

@Benchmark

public 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:44

Benchmark 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

以上就是本次讲述知识点的全部内容,感谢你对脚本之家的支持。

java 8 stream 性能_java8中parallelStream性能测试及结果分析相关推荐

  1. java8 stream遍历_Java8中用法优雅的 Stream,性能也优雅吗?

    Java8的Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码.那么,Stream API的性能到底如何呢,代码整洁的背后是否意味着性能的损耗呢?本文对Str ...

  2. 用Java实现Stream流处理中的滑窗

    2019独角兽企业重金招聘Python工程师标准>>> 简单地说,滑窗算法是一种移动固定大小的窗口(子列表)来遍历数据结构的方法,主要是基于固定步骤的序列流数据. 如果我们想通过使用 ...

  3. java 8 stream入门_java8 Stream 流快速入门

    Stream 流 简介 Java 8 中,得益于 lambda 带来的函数式编程,引入了一个全新的 Stream流 概念,用于解决集合已有的弊端. 好处 我们先来看一个例子: 筛选出 names 中以 ...

  4. java 月份适配计算_Java8中的时间日期API这么好用,你居然还没有掌握?

    工作这么久了,对于Java中时间日期的操作一直很蛋疼,一会用Date,一会用Calendar或者LocalDateTime,始终没有认真总结过它们的联系与区别.迷迷糊糊用了好几年了,今天终于搞清楚了! ...

  5. java酷炫代码_Java8 中有趣酷炫的小技巧

    执行注释 大多数开发人员认为注释永远不会在程序中执行,并用于帮助代码理解.但是,它们却可以被执行: public class Main { public static void main(String ...

  6. java equals equalsignorecase 性能_Java中equals()与equalsIgnoreCase()之间的区别

    equals()在Java中使用以检查两个字符串之间的相等性. equalsIgnoreCase()在Java中使用,以忽略大小写检查两个字符串之间的相等性. 假设以下是我们的两个字符串-String ...

  7. java equals equalsignorecase 性能_Java中equals()、equalsIgnoreCase()和==的区别

    用久了C#,在Java中,判断一个字符串还是习惯性的用了==,但是总是不能按照正确的判断分支运行,后来才想起来Java中是有equals的,然后就有引出了equalsIgnoreCase. 这三种的正 ...

  8. java equals equalsignorecase 性能_JAVA中字符串比较equals()和equalsIgnoreCase()的区别

    JAVA中字符串比较equals()和equalsIgnoreCase()的区别 1.使用equals( )方法比较两个字符串是否相等.它具有如下的一般形式: boolean equals(Objec ...

  9. java optional详解_java8中Optional的用法详解

    package com.lyzx.concurrent.java8; import org.junit.Test; import java.util.Optional; import java.uti ...

最新文章

  1. Js计算时间差(天、小时、分钟、秒)
  2. CentOs7安装apache以及遇到的问题
  3. python字典_Python 字典
  4. Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果
  5. string 类简介和例程
  6. mysql 网吧管理系统设计_网吧管理系统开题报告.doc
  7. h3c服务器虚拟光驱上传慢,01-正文
  8. SQL Server 2022 CPT 2.0 下载
  9. from scipy.misc import comb ImportError: cannot import name ‘comb‘
  10. 实验4-1-4 求整数的位数及各位数字之和 (15分)(想象成剥洋葱)
  11. 第一章 数据仓库理论专题
  12. php 邮件群发功能,php实现邮件群发
  13. Unity 进阶 之 简单模仿鼠标交互(场景:手机屏幕当做触摸板Touch Pad,移动鼠标,鼠标确定等操作)
  14. 如何实现按键的短按、长按检测?
  15. java数据类型图:
  16. 使用Vscode调试vue代码
  17. 【PC工具】chrome谷歌浏览器各种版本,最好用的浏览器没有之一。低调使用福利...
  18. [leetcode] 893. Groups of Special-Equivalent Strings
  19. 很好的英文资料书籍下载网站
  20. win7 远程桌面操作步骤

热门文章

  1. 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
  2. dotnet core开发体验之开始MVC
  3. java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
  4. 计算机应用技术 平面设计,全国信息化计算机应用技术水平教育考试试卷 平面设计师...
  5. Android OkHttp3简介和使用详解
  6. Android之如何判断设备是平板还是手机
  7. 字符串之将整数字符串转成整数值
  8. github上面如何编辑README
  9. (五)python3 只需3小时带你轻松入门—— 逻辑运算符
  10. java barrier_Java并发类CyclicBarrier方法详解