91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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 運(yùn)行在-server模式下,測試數(shù)據(jù)在 GB 量級,測試機(jī)器采用常見的商用服務(wù)器,配置如下:

一探究竟Java 8的Stream API性能

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

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

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

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

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

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

實驗一 基本類型迭代

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

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

一探究竟Java 8的Stream API性能

圖中展示的是 for 循環(huán)外部迭代耗時為基準(zhǔ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 迭代時性能較好。

實驗三 復(fù)雜對象歸約

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

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

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

一探究竟Java 8的Stream API性能

分析,對于復(fù)雜的歸約操作:

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

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

一探究竟Java 8的Stream API性能

分析,對于復(fù)雜的歸約操作:

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

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

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

結(jié)論

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

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

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

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

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

對于復(fù)雜操作,推薦使用 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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3001

    瀏覽量

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

    關(guān)注

    2

    文章

    2371

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    使用恩智浦MCU實現(xiàn)創(chuàng)新人形機(jī)器人靈巧手解決方案

    如此“絲滑”的人形機(jī)器人靈巧手,是如何實現(xiàn)的?本文帶你一探究竟
    的頭像 發(fā)表于 02-02 09:54 ?1566次閱讀

    文讀懂VCSEL芯片為何與眾不同

    VCSEL芯片是如何誕生的?是德科技帶你走進(jìn)慧芯激光產(chǎn)業(yè)園一探究竟!
    的頭像 發(fā)表于 01-09 14:19 ?559次閱讀

    教你如何使用API

    、了解API API(Application Programming Interface)即應(yīng)用程序編程接口,是種使不同的應(yīng)用程序能共享數(shù)據(jù)和功能的軟件工具。
    的頭像 發(fā)表于 11-09 17:48 ?1305次閱讀

    Arm Neoverse CPU上大代碼量Java應(yīng)用的性能測試

    Java 是互聯(lián)網(wǎng)領(lǐng)域廣泛使用的編程語言。Java 應(yīng)用的些特性使其性能表現(xiàn)與提前編譯的原生應(yīng)用(例如 C 程序)大相徑庭。由于 Java
    的頭像 發(fā)表于 11-05 11:25 ?755次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應(yīng)用的<b class='flag-5'>性能</b>測試

    如何選擇高效工業(yè)電源?基于ST VIPERGAN100的2.7 V/100W反激電源了解下!

    ,成為工業(yè)電源領(lǐng)域的佼佼者。那么,這款電源究竟有哪些亮點?它如何幫助設(shè)計人員實現(xiàn)高效能與快速上市?讓我們一探究竟!場景應(yīng)用圖核心技術(shù)亮點1.準(zhǔn)諧振(QR)反激控制器基于VIPERGA
    的頭像 發(fā)表于 09-01 16:33 ?4647次閱讀
    如何選擇高效工業(yè)電源?基于ST VIPERGAN100的2.7 V/100W反激電源了解<b class='flag-5'>一</b>下!

    顆電阻100多塊?國產(chǎn)替代能否打破天價神話?

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

    多摩川高分辨率編碼器:究竟如何賦能數(shù)控機(jī)床超精密運(yùn)動控制?

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

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

    ? 在電子商務(wù)蓬勃發(fā)展的今天,支付API作為交易流程的核心環(huán)節(jié),其性能直接影響用戶體驗、轉(zhuǎn)化率和業(yè)務(wù)收入。次緩慢的支付響應(yīng)可能導(dǎo)致用戶流失或交易失敗,造成不可估量的損失。本文將從性能
    的頭像 發(fā)表于 07-10 14:52 ?616次閱讀
    深入解析電商支付<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 ?606次閱讀
    淘寶電商 <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è)計適合的方案。并廣泛應(yīng)用
    的頭像 發(fā)表于 07-07 14:42 ?1508次閱讀
    <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 ?1465次閱讀

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

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

    文詳解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 ?2772次閱讀
    <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 ?965次閱讀
    如何選擇合適的 DC/DC LED Driver?讓我?guī)?b class='flag-5'>一探究竟</b>

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

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