java8中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)
publicclassStreamBenchTest{
Listdata=newArrayList<>();
@Setup
publicvoidinit(){
//prepare
for(inti=0;i<100;i++){
data.add(UUID.randomUUID().toString());
}
}
@TearDown
publicvoiddestory(){
//destory
}
@Benchmark
publicvoidbenchStream(){
data.stream().forEach(e->{
e.getBytes();
try{
Thread.sleep(10);
}catch(InterruptedExceptione1){
e1.printStackTrace();
}
});
}
@Benchmark
publicvoidbenchParallelStream(){
data.parallelStream().forEach(e->{
e.getBytes();
try{
Thread.sleep(10);
}catch(InterruptedExceptione1){
e1.printStackTrace();
}
});
}
publicstaticvoidmain(String[]args)throwsRunnerException{
Optionsopt=newOptionsBuilder()
.include(".*"+StreamBenchTest.class.getSimpleName()+".*")
.forks(1)
.build();
newRunner(opt).run();
}
}
parallelStream线程数
默认是Runtime.getRuntime().availableProcessors()-1,这里为7
运行结果
#Runcomplete.Totaltime:00:02:44 BenchmarkModeCntScoreErrorUnits StreamBenchTest.benchParallelStreamavgt20155868805.437±1509175.840ns/op StreamBenchTest.benchStreamavgt201147570372.950±6138494.414ns/op
测试2
将数据data改为30,同时sleep改为100
BenchmarkModeCntScoreErrorUnits StreamBenchTest.benchParallelStreamavgt20414230854.631±725294.455ns/op StreamBenchTest.benchStreamavgt203107250608.500±4805037.628ns/op
可以发现sleep越长,parallelStream优势越明显。
小结
parallelStream在阻塞场景下优势更明显,其线程池个数默认为
Runtime.getRuntime().availableProcessors()-1,如果需修改则需设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8
以上就是本次讲述知识点的全部内容,感谢你对毛票票的支持。
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短