99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

一探究竟Java 8的Stream API性能

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

掃碼添加小助手

加入工程師交流群

Stream Performance

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

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

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

一探究竟Java 8的Stream API性能

測試方法和測試數(shù)據(jù)

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

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

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

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

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

實驗一 基本類型迭代

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

測試程序 IntTest,測試結(jié)果如下圖:

一探究竟Java 8的Stream API性能

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

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

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

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

一探究竟Java 8的Stream API性能


分析,對于基本類型:

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

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

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

實驗二 對象迭代

再來看對象的迭代效果。

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

測試程序 StringTest,測試結(jié)果如下圖:

一探究竟Java 8的Stream API性能


結(jié)果分析如下:

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

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

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

一探究竟Java 8的Stream API性能

分析,對于對象類型:

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

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

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

實驗三 復雜對象歸約

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

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

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

一探究竟Java 8的Stream API性能

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

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

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

一探究竟Java 8的Stream API性能

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

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

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

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

結(jié)論

上述三個實驗的結(jié)果可以總結(jié)如下:

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

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

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

對于簡單操作推薦使用外部迭代手動實現(xiàn),

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

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

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

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

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

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109982
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1624

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

    ? 在電子商務蓬勃發(fā)展的今天,支付API作為交易流程的核心環(huán)節(jié),其性能直接影響用戶體驗、轉(zhuǎn)化率和業(yè)務收入。次緩慢的支付響應可能導致用戶流失或交易失敗,造成不可估量的損失。本文將從性能
    的頭像 發(fā)表于 07-10 14:52 ?88次閱讀
    深入解析電商支付<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 ?161次閱讀
    淘寶電商 <b class='flag-5'>API</b> 接口 VS 其他平臺,優(yōu)勢<b class='flag-5'>究竟</b>在哪?

    一探究竟差分晶振

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

    雷曼光電分析MiP器件顯示技術(shù)的優(yōu)勢

    在顯示技術(shù)不斷迭代的浪潮中,MiP(Micro LED-in-Package)器件(無襯底芯片)顯示技術(shù)(下文簡稱:MiP),正以其獨特的優(yōu)勢和創(chuàng)新的架構(gòu),成為行業(yè)矚目的焦點。這項技術(shù)究竟有何魔力,能在眾多顯示技術(shù)中脫穎而出,甚至有望改寫行業(yè)規(guī)則?讓我們一探究竟
    的頭像 發(fā)表于 05-27 11:38 ?478次閱讀

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

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

    文詳解Video In to AXI4-Stream IP核

    Video In to AXI4-Stream IP核用于將視頻源(帶有同步信號的時鐘并行視頻數(shù)據(jù),即同步sync或消隱blank信號或者而后者皆有)轉(zhuǎn)換成AXI4-Stream接口形式,實現(xiàn)了接口轉(zhuǎn)換。該IP還可使用VTC核,VTC在視頻輸入和視頻處理之間起橋梁作用。
    的頭像 發(fā)表于 04-03 09:28 ?1335次閱讀
    <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 的身影無處不在。眾多品牌紛紛布局這領(lǐng)域,推出了系列各具特色的代表性物料。接下來,就讓我們深入探究 DC/DC LED Driver 有哪些品牌以及那些具有代表性的物料。?
    的頭像 發(fā)表于 03-24 11:36 ?333次閱讀
    如何選擇合適的 DC/DC LED Driver?讓我?guī)?b class='flag-5'>一探究竟</b>

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

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

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

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

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

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

    Java 23功能介紹

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

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

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

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

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

    插座也有顯示屏?快來一探究竟!

    顯示屏智能插座,通過顯示屏實時監(jiān)控與可視化展示、智能定時與提醒、靈活操作與安全保障、節(jié)能環(huán)保,具備高智能化水平,改變用電方式,成為數(shù)字化和智能化時代的重要橋梁。
    的頭像 發(fā)表于 09-02 15:31 ?744次閱讀
    插座也有顯示屏?快來<b class='flag-5'>一探究竟</b>!