chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一探究竟Java 8的Stream API性能

汽車玩家 ? 來源:今日頭條 ? 作者:Java的小本家 ? 2020-05-04 14:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Stream Performance

已經對 Stream API 的用法鼓吹夠多了,用起簡潔直觀,但性能到底怎么樣呢?會不會有很高的性能損失?

本節(jié)我們對 Stream API 的性能一探究竟。

為保證測試結果真實可信,我們將 JVM 運行在-server模式下,測試數據在 GB 量級,測試機器采用常見的商用服務器,配置如下:

一探究竟Java 8的Stream API性能

測試方法和測試數據

性能測試并不是容易的事,Java 性能測試更費勁,因為虛擬機對性能的影響很大,JVM 對性能的影響有兩方面:

GC 的影響。GC 的行為是 Java 中很不好控制的一塊,為增加確定性,我們手動指定使用 CMS 收集器,并使用 10GB 固定大小的堆內存。具體到 JVM 參數就是-XX:+UseConcMarkSweepGC-Xms10G-Xmx10G

JIT(Just-In-Time) 即時編譯技術。即時編譯技術會將熱點代碼在 JVM 運行的過程中編譯成本地代碼,測試時我們會先對程序預熱,觸發(fā)對測試函數的即時編譯。相關的 JVM 參數是-XX:CompileThreshold=10000。

Stream 并行執(zhí)行時用到ForkJoinPool.commonPool()得到的線程池,為控制并行度我們使用 Linux 的taskset命令指定 JVM 可用的核數。

測試數據由程序隨機生成。為防止一次測試帶來的抖動,測試 4 次求出平均時間作為運行時間。

實驗一 基本類型迭代

測試內容:找出整型數組中的最小值。對比 for 循環(huán)外部迭代和 Stream API 內部迭代性能。

測試程序 IntTest,測試結果如下圖:

一探究竟Java 8的Stream API性能

圖中展示的是 for 循環(huán)外部迭代耗時為基準的時間比值。分析如下:

對于基本類型 Stream 串行迭代的性能開銷明顯高于外部迭代開銷(兩倍);

Stream 并行迭代的性能比串行迭代和外部迭代都好。

并行迭代性能跟可利用的核數有關,上圖中的并行迭代使用了全部 12 個核,為考察使用核數對性能的影響,我們專門測試了不同核數下的 Stream 并行迭代效果:

一探究竟Java 8的Stream API性能


分析,對于基本類型:

使用 Stream 并行 API 在單核情況下性能很差,比 Stream 串行 API 的性能還差;

隨著使用核數的增加,Stream 并行效果逐漸變好,比使用 for 循環(huán)外部迭代的性能還好。

以上兩個測試說明,對于基本類型的簡單迭代,Stream 串行迭代性能更差,但多核情況下 Stream 迭代時性能較好。

實驗二 對象迭代

再來看對象的迭代效果。

測試內容:找出字符串列表中最小的元素(自然順序),對比 for 循環(huán)外部迭代和 Stream API 內部迭代性能。

測試程序 StringTest,測試結果如下圖:

一探究竟Java 8的Stream API性能


結果分析如下:

對于對象類型 Stream 串行迭代的性能開銷仍然高于外部迭代開銷(1.5 倍),但差距沒有基本類型那么大。

Stream 并行迭代的性能比串行迭代和外部迭代都好。

再來單獨考察 Stream 并行迭代效果:

一探究竟Java 8的Stream API性能

分析,對于對象類型:

使用 Stream 并行 API 在單核情況下性能比 for 循環(huán)外部迭代差;

隨著使用核數的增加,Stream 并行效果逐漸變好,多核帶來的效果明顯。

以上兩個測試說明,對于對象類型的簡單迭代,Stream 串行迭代性能更差,但多核情況下 Stream 迭代時性能較好。

實驗三 復雜對象歸約

從實驗一、二的結果來看,Stream 串行執(zhí)行的效果都比外部迭代差(很多),是不是說明 Stream 真的不行了?先別下結論,我們再來考察一下更復雜的操作。

測試內容:給定訂單列表,統(tǒng)計每個用戶的總交易額。對比使用外部迭代手動實現和 Stream API 之間的性能。

我們將訂單簡化為構成的元組,并用Order對象來表示。測試程序 ReductionTest,測試結果如下圖:

一探究竟Java 8的Stream API性能

分析,對于復雜的歸約操作:

Stream API 的性能普遍好于外部手動迭代,并行 Stream 效果更佳;

再來考察并行度對并行效果的影響,測試結果如下:

一探究竟Java 8的Stream API性能

分析,對于復雜的歸約操作:

使用 Stream 并行歸約在單核情況下性能比串行歸約以及手動歸約都要差,簡單說就是最差的;

隨著使用核數的增加,Stream 并行效果逐漸變好,多核帶來的效果明顯。

以上兩個實驗說明,對于復雜的歸約操作,Stream 串行歸約效果好于手動歸約,在多核情況下,并行歸約效果更佳。我們有理由相信,對于其他復雜的操作,Stream API 也能表現出相似的性能表現。

結論

上述三個實驗的結果可以總結如下:

對于簡單操作,比如最簡單的遍歷,Stream 串行 API 性能明顯差于顯示迭代,但并行的 Stream API 能夠發(fā)揮多核特性。

對于復雜操作,Stream 串行 API 性能可以和手動實現的效果匹敵,在并行執(zhí)行時 Stream API 效果遠超手動實現。

所以,如果出于性能考慮,

對于簡單操作推薦使用外部迭代手動實現,

對于復雜操作,推薦使用 Stream API,

在多核情況下,推薦使用并行 Stream API 來發(fā)揮多核優(yōu)勢,

單核情況下不建議使用并行 Stream API。

如果出于代碼簡潔性考慮,使用 Stream API 能夠寫出更短的代碼。即使是從性能方面說,盡可能的使用 Stream API 也另外一個優(yōu)勢,那就是只要 Java Stream 類庫做了升級優(yōu)化,代碼不用做任何修改就能享受到升級帶來的好處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2992

    瀏覽量

    114789
  • API
    API
    +關注

    關注

    2

    文章

    1931

    瀏覽量

    65531
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    顆電阻100多塊?國產替代能否打破天價神話?

    長期以來,高端精密電阻市場被海外品牌壟斷,它們靠先發(fā)優(yōu)勢和技術積累主導市場,價格居高不下,給國內依賴此類電阻的企業(yè)帶來成本壓力,制約行業(yè)發(fā)展。 開步電子自主研發(fā)的 PCSR2512 精密檢流電阻突破技術壁壘,打入國際市場,為國產精密電阻爭得席之地。這款電阻究竟有何硬核實
    的頭像 發(fā)表于 08-12 13:53 ?384次閱讀
    <b class='flag-5'>一</b>顆電阻100多塊?國產替代能否打破天價神話?

    多摩川高分辨率編碼器:究竟如何賦能數控機床超精密運動控制?

    在現代制造業(yè)中,數控機床的應用極為廣泛,其加工精度直接影響著產品的質量和性能。而多摩川高分辨率編碼器的出現,為數控機床的超精密運動控制帶來了新的突破。那么,它究竟是如何實現這賦能的呢?讓我們
    的頭像 發(fā)表于 08-04 17:59 ?626次閱讀

    深入解析電商支付API性能瓶頸與解決方案

    ? 在電子商務蓬勃發(fā)展的今天,支付API作為交易流程的核心環(huán)節(jié),其性能直接影響用戶體驗、轉化率和業(yè)務收入。次緩慢的支付響應可能導致用戶流失或交易失敗,造成不可估量的損失。本文將從性能
    的頭像 發(fā)表于 07-10 14:52 ?240次閱讀
    深入解析電商支付<b class='flag-5'>API</b>的<b class='flag-5'>性能</b>瓶頸與解決方案

    淘寶電商 API 接口 VS 其他平臺,優(yōu)勢究竟在哪?

    、亞馬遜等)相比,淘寶電商 API 究竟有哪些獨特優(yōu)勢?本文將逐步分析,幫助開發(fā)者、商家和決策者做出明智選擇。 1. 淘寶電商 API 的核心功能概述 淘寶 API 提供了
    的頭像 發(fā)表于 07-09 15:11 ?305次閱讀
    淘寶電商 <b class='flag-5'>API</b> 接口 VS 其他平臺,優(yōu)勢<b class='flag-5'>究竟</b>在哪?

    一探究竟差分晶振

    隨著科技的發(fā)展,我們傳輸的數據變大,傳輸的距離變長,對頻率穩(wěn)定度的要求變高。近年來也受到越來越多的電子工程師更青睞差分晶振,它具備高性能、低功耗、低噪聲的優(yōu)點,使其成為很多設計適合的方案。并廣泛應用
    的頭像 發(fā)表于 07-07 14:42 ?844次閱讀
    <b class='flag-5'>一探究竟</b>差分晶振

    福祿克ST20MAX紅外測溫儀究竟有多好用

    “精準測量、智能預約、堅固耐用、貼心設計…” 小福帶著首批ST20MAX客戶試用心得來啦!ST20MAX 究竟有多好用?讓我們一探究竟!
    的頭像 發(fā)表于 04-10 13:55 ?567次閱讀

    文詳解Video In to AXI4-Stream IP核

    Video In to AXI4-Stream IP核用于將視頻源(帶有同步信號的時鐘并行視頻數據,即同步sync或消隱blank信號或者而后者皆有)轉換成AXI4-Stream接口形式,實現了接口轉換。該IP還可使用VTC核,VTC在視頻輸入和視頻處理之間起橋梁作用。
    的頭像 發(fā)表于 04-03 09:28 ?1947次閱讀
    <b class='flag-5'>一</b>文詳解Video In to AXI4-<b class='flag-5'>Stream</b> IP核

    如何選擇合適的 DC/DC LED Driver?讓我?guī)?b class='flag-5'>一探究竟

    Driver 的身影無處不在。眾多品牌紛紛布局這領域,推出了系列各具特色的代表性物料。接下來,就讓我們深入探究 DC/DC LED Driver 有哪些品牌以及那些具有代表性的物料。?
    的頭像 發(fā)表于 03-24 11:36 ?572次閱讀
    如何選擇合適的 DC/DC LED Driver?讓我?guī)?b class='flag-5'>一探究竟</b>

    M12連接器究竟有何“過人之處”?帶你一探究竟

    M12連接器憑借其緊湊的結構、出色的防護性能、可靠的連接以及卓越的信號傳輸能力,在工業(yè)領域展現出強大的競爭力。德索精密工業(yè)依托專業(yè)的研發(fā)團隊、先進的生產工藝和嚴格的質量檢測體系,致力于為客戶提供
    的頭像 發(fā)表于 03-20 09:05 ?458次閱讀
    M12連接器<b class='flag-5'>究竟</b>有何“過人之處”?帶你<b class='flag-5'>一探究竟</b>

    M12連接器究竟有何優(yōu)勢帶你一探究竟

    M12連接器憑借其緊湊的結構、出色的防護性能、可靠的連接以及卓越的信號傳輸能力,在工業(yè)領域展現出強大的競爭力。德索精密工業(yè)依托專業(yè)的研發(fā)團隊、先進的生產工藝和嚴格的質量檢測體系,致力于為客戶提供
    的頭像 發(fā)表于 03-05 13:51 ?452次閱讀
    M12連接器<b class='flag-5'>究竟</b>有何優(yōu)勢帶你<b class='flag-5'>一探究竟</b>

    英特爾OpenVINO 2025.0正式發(fā)布

    生成式AI(GenAI)在模型質量與應用范圍上持續(xù)爆發(fā)式增長,DeepSeek 等頂尖模型已引發(fā)行業(yè)熱議,這種勢頭預計將在 2025年延續(xù)。本次更新聚焦性能提升、更多生成式AI 模型的支持,并針對英特爾神經處理單元(NPU)推出關鍵優(yōu)化。讓我們來一探究竟吧!
    的頭像 發(fā)表于 02-21 10:20 ?1497次閱讀
    英特爾OpenVINO 2025.0正式發(fā)布

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語言功能、核心 API 以及 JVM,同時適合新的 Java 開發(fā)者和高級開發(fā)者。從?IntelliJ IDEA 2024.2?開始已支持
    的頭像 發(fā)表于 12-04 10:02 ?1324次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java集合API的改進介紹

    解答這些問題。 我們將逐步學習 Java 集合類的優(yōu)化過程,并按版本逐對比分析。主要討論的焦點將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能
    的頭像 發(fā)表于 11-22 11:12 ?764次閱讀
    <b class='flag-5'>Java</b>集合<b class='flag-5'>API</b>的改進介紹

    使用Arthas火焰圖工具的Java應用性能分析和優(yōu)化經驗

    分享作者在使用Arthas火焰圖工具進行Java應用性能分析和優(yōu)化的經驗。
    的頭像 發(fā)表于 10-28 09:27 ?1830次閱讀
    使用Arthas火焰圖工具的<b class='flag-5'>Java</b>應用<b class='flag-5'>性能</b>分析和優(yōu)化經驗

    超高頻讀寫器究竟是什么,能做什么?文讀懂!

    在物聯網技術日新月異的今天,超高頻讀寫器作為射頻識別(RFID)技術的重要組成部分,正逐漸滲透到我們生活的各個領域。那么,超高頻讀寫器究竟是什么?它又能做些什么呢?本文將帶您一探究竟。、超高頻
    的頭像 發(fā)表于 10-23 14:41 ?1087次閱讀
    超高頻讀寫器<b class='flag-5'>究竟</b>是什么,能做什么?<b class='flag-5'>一</b>文讀懂!