java流式传输对象_Java性能:面向教学与流式传输

java流式传输对象

在for循环中向上或向下计数是最有效的迭代方式吗? 有时答案既不可行。 阅读这篇文章,了解不同迭代品种的影响。

迭代性能

关于如何以高性能进行迭代有很多观点。 Java中的传统迭代方式是一个for循环,该循环从零开始,然后计数到一些预定义的数字:

private static final int ITERATIONS = 10_000;@Benchmark
public int forUp() {int sum = 0;for (int i = 0; i < ITERATIONS; i++) {sum += i;}return sum;
}

有时,我们遇到一个for循环,该循环以预定的非负值开始,然后递减计数。 这在JDK本身中非常普遍,例如在String类中。 这是通过递减而不是递增来解决先前问题的示例。

@Benchmark
public int forDown() {int sum = 0;for (int i = ITERATIONS; i-- > 0;) {sum += i;}return sum;
}

我认为,这样做的理由是,检查值与零的关系可能比测试值与任何其他任意值的关系更有效。 实际上,我所知道的所有CPU都有机器码指令,可以检查给定值与零的关系。 另一个想法是,上面给出的递减计数习惯似乎只检查一次循环变量(它同时检查值,然后减小它),而不是顶部的常规示例。 我怀疑这对当今高效的JIT编译器影响很小或没有影响,后者将能够像优化第二个迭代一样优化第一个迭代。 当代码在解释模式下运行时,可能会产生影响,但是本文中未对此进行检查。

另一种方法是使用
IntStream看起来像这样:

@Benchmark
public int stream() {return IntStream.range(0, ITERATIONS).sum();
}

如果大型迭代需要更高的性能,则只需在流中添加.parallel()运算符就可以使流并行变得相对容易。 本文未对此进行检查。

Graal VM下的性能

在我的笔记本电脑(MacBook Pro,2015年中,2.2 GHz Intel Core i7)上的GraalVM(rc-11,以及GraallVM附带的新C2编译器)下运行这些测试可以得出以下结果:

Benchmark              Mode  Cnt       Score       Error  Units
ForBenchmark.forDown  thrpt    5  311419.166 ±  4201.724  ops/s
ForBenchmark.forUp    thrpt    5  309598.916 ± 12998.579  ops/s
ForBenchmark.stream   thrpt    5  312360.089 ±  8291.792  ops/s

对于流解决方案是最快的解决方案(尽管其误差在误差范围内),这可能会让某些人感到意外。

在上一篇文章中 ,我介绍了与传统命令式代码相比,流和声明式编程在代码度量方面的一些优势。 我尚未测试过冷代码段的性能(即在JIT启动之前)。

聪明的数学

从数学上,我们记得从零开始的连续数字的总和为N *(N + 1)/ 2,其中N是序列中的最高数字。 运行此基准测试:

@Benchmark
public int math() {return ITERATIONS * (ITERATIONS + 1) / 2;
}

使我们的性能比以前的实现提高了1000倍以上:

Benchmark           Mode  Cnt          Score          Error  Units
ForBenchmark.math  thrpt    5  395561077.984 ± 11138012.141  ops/s

迭代次数越多,收益越大。 聪明有时会胜过蛮力。

超快速数据流

借助Speedment HyperStream,可以从数据库获得类似的性能。 在HyperStream上信息 。

结论

在某些常用的硬件/ JVM上,无论我们在for循环中向上还是向下进行迭代都没有关系。 较新的JVM能够优化流迭代,因此与for循环相比,它们具有同等甚至更好的性能。

在我看来,与for循环相比,流代码通常更具可读性,因此,我相信流在某些将来可能是事实上的迭代发明。

使用Speedment HyperStream可以高性能地流式传输数据库内容。

翻译自: https://www.javacodegeeks.com/2019/09/java-performance-for-eaching-vs-streaming.html

java流式传输对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue框架项目部署到服务器_在浏览器中在线尝试无服务器框架项目!

vue框架项目部署到服务器无服务器框架是无服务器工具的一致领导者。 但是&#xff0c;没有简单的方法可以在线试用无服务器框架项目。 您确实需要一个体面的开发人员设置&#xff0c;并且需要一些工作来设置sls &#xff0c; npm等。 确切地说&#xff0c;您确实做到了 –直到…

用python连接数据库_用Python连接MySQL

MySQL是当下最流行的关系型数据库管理系统之一,在用Python爬取网络数据的过程中也经常需要用到MySQL,Python中pymysql库提供了连接MySQL的接口,为Python连接和操作MySQL提供了便利.一,安装pymysql库直接使用pip工具进行安装:pip install pymysql二,连接mysql首先导入第三方库,然…

树的预备知识

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;旨在整理出 树的相关术语和概念&#xff08;哥子始终记不住树的高度和深度&#xff0c;记着记着就混淆了&#xff0c;哎&#xff0c;所以分享出来&#xff09;&#xff1b; 【1】树相关 1.1&#xff…

arduino蓝牙通讯代码_蓝牙4.0模块 无线数据传输模块 无线蓝牙串口 Arduino

产品介绍&#xff1a;蓝牙4.0模块是专为智能无线数据传输而打造的。该模块遵循BT2.1EDR/3.0/4.0(BLE)蓝牙规范&#xff0c;支持SPP 蓝牙串口协议等。本模块集成了MCU 和蓝牙芯片&#xff0c;支持UART、SPI、I2C、I2S 等接口&#xff0c;包含4 个PWM 端口和6 个12bit ADC 通道&a…

后台审核管理 ergo_Kogito,ergo规则—第2部分:规则的全面执行模型

后台审核管理 ergo这是第二后 一系列更新的Kogito主动性和我们的努力&#xff0c;使Drools的云。 在本文中&#xff0c;我们将深入研究规则单元的详细信息&#xff0c;并向您展示为什么我们对它们感到兴奋。 规则的全包执行模型 如果您一直在仔细检查Drools手册&#xff0c;以…

不相交集ADT(联机算法 + 脱机算法)

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 旨在分享 不相交集ADT的相关概念&#xff1b; 0.2&#xff09; 不相交集ADT 的知识涉及到&#xff1a; 等价关系、动态等价关系、不相交集ADT相关操作及其数据结构 &#xff0c;还有我们最后分享的 不…

win7无法连接打印机拒绝访问_Win7系统”windows无法连接到打印机拒绝访问“怎么办?通过创建local port端口连接来搞定...

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到Win7系统”windows无法连接到打印机拒绝访问“的问题&#xff0c;要怎么处理呢&#xff1f;详细解决方法如下&#xff1a;故障现象&#xff1a;按照XP的方式添加打印机&#xff0c;总是会出现“windows无法连接到打印…

spring boot测试_测试Spring Boot有条件的合理方式

spring boot测试如果您或多或少有经验的Spring Boot用户&#xff0c;那么很幸运&#xff0c;在某些时候您可能需要遇到必须有条件地注入特定bean或配置的情况 。 它的机制是很好理解的 &#xff0c;但有时这样的测试条件下&#xff08;以及它们的组合&#xff09;可能会导致混乱…

不相交集的求并算法(按集合大小求并+按高度求并)

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 但源代码均为原创&#xff0c;旨在实现 不相交集ADT的两个操作&#xff1a;合并集合union查找集合find&#xff1b; 0.2&#xff09; 不相交集ADT 的 Introduction &#xff0c; 参见 http://blog.csd…

及时复盘的好处_该如何复盘 先来说说复盘的好处: 复盘的好处简直太多了!就像你学习一样有一个总结的过程,复盘的最直接好处就是增强你的“股感”!在股市... - 雪球...

来源&#xff1a;雪球App&#xff0c;作者&#xff1a; 孜孜金融&#xff0c;(https://xueqiu.com/3493013654/135651359)先来说说复盘的好处&#xff1a;复盘的好处简直太多了&#xff01;就像你学习一样有一个总结的过程&#xff0c;复盘的最直接好处就是增强你的“股感”&am…

posman mocks_使用Mocks进行需求驱动的软件开发

posman mocksjmock作者撰写的有关模拟框架的优秀论文 。 本文写于18年前的2004年&#xff0c;但其中有许多构建可维护软件系统的技巧。 在这篇文章中&#xff0c;我将重点介绍本文中的关键思想&#xff0c;但建议您阅读本文以获取有关模拟和编程实践的重要思想。 模拟对象是测…

不相交集合求并的路径压缩

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在实现 对不相交集合的路径压缩操作&#xff1b; 0.2&#xff09;对求并后的集合进行路径压缩&#xff0c;目的是降低集合&#xff08;合并树&#xff09;的深度&#x…

python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...

首先介绍几个概念&#xff1a;1、#所谓的静态方法就是这个方法任何类都可以调用&#xff0c;程序一加载就存在的方法2、所谓的类方法就是这个类一加载就存在的方法&#xff0c;不用实例化这个类就已经存在的方法3、所谓的元类就是创建类的类元类&#xff1a; type我们知道对象是…

flutter调用api_如何在Flutter(REST API)中进行API调用

flutter调用api在本文中&#xff0c;我们将看一下如何快速进行API调用并使用简单的REST API。 在这里查看我在Flutter上的其他一些帖子&#xff1a; Flutter vs React Native 了解Flutter中的BLoC架构 &#xff08;强烈建议&#xff09; 在Flutter中构建ListView&#xff0…

java重载与重写的区别+重写父类equals方法的完美实现

【0】README 0.1&#xff09; 本文章节【1】和【2】的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html &#xff1b; 旨在区分重载与重写以及他们的相关概念&#xff1b; 0.2&#xff09; 本文章节【3】的内容转自 http://blog.csdn.net/pacoson…

checkpoint_通过Main的Checkpoint Restore加快Java启动速度

checkpointJava虚拟机为已编译为字节码 &#xff08;但不一定是用Java编写&#xff09;的应用程序提供了托管运行时环境。 与为特定平台静态编译的代码相比&#xff0c;这为应用程序开发人员提供了许多好处&#xff0c;并且通常可以提高性能。 JVM通过垃圾回收器 &#xff08;G…

泛型数组列表ArrayList

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清 java 中的 数组列表 ArrayList&#xff1b; 【2】数组列表 ArrayList 2.1&#xff09;ArrayList&#xff1a; ArrayList 具有自动调节数组容量的功能&#xff0c; 而不需要为此…

大数据聚类分析用于预测_多模态数据中的非负矩阵分解用于分割和标签预测

引用Akata Z, Thurau C, Bauckhage C. Non-negative matrix factorization in multimodality data for segmentation and label prediction[C]. 2011.摘要随着 Internet 上带注释的多媒体数据的可用性不断提高&#xff0c;要求有一种技术可以实现不同类型数据的原则性联合处理。…

程序员 rs编码_为什么声明性编码使您成为更好的程序员

程序员 rs编码在许多情况下&#xff0c;具有功能组成的声明式解决方案提供了优于传统命令式代码的出色代码指标。 阅读本文并了解如何使用具有功能组成的声明性代码成为一名更好的程序员。 在本文中&#xff0c;我们将仔细研究三个问题示例&#xff0c;并研究用于解决这些问题…

对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 自动拆箱&#xff08;装箱&#xff09;、printf的参数数量可变 以及 枚举类的详细说明&#xff1b; 0.2&#xff09; 源代码&#xff1a; https://github.com/pacosonTang/core…