日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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流式傳輸對象

總結

以上是生活随笔為你收集整理的java流式传输对象_Java性能:面向教学与流式传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。