时间:2021-05-19
测试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<>(); @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:44Benchmark Mode Cnt Score Error UnitsStreamBenchTest.benchParallelStream avgt 20 155868805.437 ± 1509175.840 ns/opStreamBenchTest.benchStream avgt 20 1147570372.950 ± 6138494.414 ns/op测试2
将数据data改为30,同时sleep改为100
Benchmark Mode Cnt Score Error UnitsStreamBenchTest.benchParallelStream avgt 20 414230854.631 ± 725294.455 ns/opStreamBenchTest.benchStream avgt 20 3107250608.500 ± 4805037.628 ns/op可以发现sleep越长,parallelStream优势越明显。
小结
parallelStream在阻塞场景下优势更明显,其线程池个数默认为
Runtime.getRuntime().availableProcessors() - 1,如果需修改则需设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8
以上就是本次讲述知识点的全部内容,感谢你对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java8的新特性之一就是lambda表达式,parallelStream()都说性能会比较高,现一探究竟。话不多说,上代码:@Testpublicvoidte
摘要:本文介绍了Java8中流的几个特性,以告诫开发者流并不是高性能的代名词,需谨慎使用流。以下是译文。流(Stream)是Java8为了实现最佳性能而引入的一
前言在Java8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java8中被打破了,Java8允许开发人员在接口中添加新方法,而无需在实现
前言最近在学习java8,所以接下来会给大家介绍一系列的Java8学习内容,那么让我们先从lambda表达式开始。众所周知从java8出现以来lambda是最重
Java目前已经出到13的版本,但是国内大部分公司应该都停留在Java8的版本(不敢承担升级带来的风险)。在Java8中给我们带来了Lambda表达式和Stre