文档章节

Java 8 数据流并行与非并行性能简单比较

l
 lzg14
发布于 2015/08/22 11:42
字数 367
阅读 1527
收藏 9
点赞 0
评论 3

Java 8通过Stream的并行操作方式可以提高执行效率,下面通过代码比较下到底有多大程度的提高。

package javatest.learner;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * 统计含有1百万随机字符串,且每个字符串长度不超过10的列表中长度大于4的字符串数量
 * @author lzg
 *
 */
public class LambdaTest {

	public static void main(String[] args) {
		//生成含有1百万随机字符串,且每个字符串长度不超过10的列表
		ListstrList = geneRandomStringList(1_000_000, 10);
		long count = 0;
		
		//java 6常用的for循环方法
		long start = System.currentTimeMillis();
		for (String str : strList) {
			if (str.length() > 4)
				count++;
		}
		//System.out.println("None Stream Names Count:" + count);
		long end = System.currentTimeMillis();
		System.out.println("None Stream Time Used:" + (end - start));

		
		//Java 8 stream
		start = System.currentTimeMillis();
		count = strList.stream().filter(str -> str.length() > 4).count();
		//System.out.println("Long Names Count:" + count);
		end = System.currentTimeMillis();
		System.out.println("Normal Stream Time Used:" + (end - start));

		
		//Java 8 parallelStream
		start = System.currentTimeMillis();
		count = strList.parallelStream().filter(str -> str.length() > 4).count();
		//System.out.println("Long Names Count:" + count);
		end = System.currentTimeMillis();
		System.out.println("Parallel Stream Time Used:" + (end - start));

	}

	/**
	 * 生成随机字符串List
	 * @param total_Length //list的总长度
	 * @param str_maxlength //每个字符串最大长度
	 * @return
	 */
	private static ListgeneRandomStringList(int total_Length,
			int str_maxlength) {

		Random r = new Random();
		StringBuilder sb = new StringBuilder(total_Length);
		for (int i = 0; i < total_Length; i++) {
			for (int j = r.nextInt(str_maxlength); j > 0; j--) {
				sb.append((char) ('a' + r.nextInt(26)));
			}
			sb.append(" ");
		}

		return Arrays.asList(sb.toString().split(" "));
	}

}

运行结果:

None Stream Time Used:21
Normal Stream Time Used:88
Parallel Stream Time Used:22


可见并行比非并行要快几倍,不过传统的for循环速度一点不慢。


© 著作权归作者所有

共有 人打赏支持
l
粉丝 8
博文 29
码字总数 11715
作品 0
朝阳
加载中

评论(3)

腰间两把刀
腰间两把刀

引用来自“你是红薯派来的逗逼吗”的评论

多运行几次,你会发现,非并行和传统的for效率是一样的
然而多运行了几次 结果并非是这样的......
l
lzg14

引用来自“你个大胖子”的评论

多运行几次,你会发现,非并行和传统的for效率是一样的
说的很对
你是红薯派来的逗逼吗
你是红薯派来的逗逼吗
多运行几次,你会发现,非并行和传统的for效率是一样的
Java 8新特性探究(三)解开lambda最强作用的神秘面纱

我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析...

OSC闲人
2013/11/18
0
42
java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 的区别

Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you exit and restart M......

大数据之路
2013/04/15
0
1
Java 8里面lambda的最佳实践

Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了...

OSC闲人
2015/04/30
0
41
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结

常见配置举例 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为...

hblt-j
2017/10/31
0
0
002_JVM内存结构及调优学习

常遇到关于内存溢出的错误 java.lang包下 StackOverflowError 很少 OutOfMemoryError: heap space(堆空间) 比较常见 OutOfMemoryError: PermGen space 经常出现 2. Java虚拟机结构和属性...

英年求肥
2014/11/11
0
0
java 虚拟机--新生代与老年代GC

1. Java堆中各代分布: 图1:Java堆中各代分布 Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放Class和M...

SunnyWu
2014/10/16
0
4
JVM性能优化,主要参数说明

JVM配置参数说明,参考N多文章和一些书籍总结如下: 参数 说明 默认值 生产环境约定 内存管理策略 -Xms/-Xmx 定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的Y...

Sheamus
2015/01/23
0
0
Hotspot 性能架构 -转

第一章:介绍和概述 Java HotSpot虚拟机是Sun公司的Java平台一个高效的虚拟机实现。Java HotSpot技术提供Java标准平台的基础设施,提供对快速开发、部署关键业务的桌面和企业应用程序的解决方...

刘小兵2014
2011/10/18
0
0
java Hotspot 内存管理白皮书(中文翻译)

1引言 一个健壮的 Java™2平台,Standard Edition (J2SE™)拥有一个自动内存管理机制,它为开发者们屏蔽了复杂的内存管理步骤。 本文提供了一个关于java Hotspot 虚拟机中内存管理机制的简...

明月照大江
2013/10/05
0
12
6.1 Java vs php 优缺点、适用类型

1、上手难度比较 php易学易懂,非技术的人,稍稍学习,可以上手,环境搭建用LAMP/WAMP一键安装包,常见开发工具,phpstorm。 Java则要求理解,Java语法和核心架构(jar包)以及JVM,环境配置也...

产品经理的技术课堂
05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
4
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
165
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部