哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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é)果真實(shí)可信,我們將 JVM 運(yùn)行在-server模式下,測試數(shù)據(jù)在 GB 量級,測試機(jī)器采用常見的商用服務(wù)器,配置如下:

一探究竟Java 8的Stream API性能

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

性能測試并不是容易的事,Java 性能測試更費(fèi)勁,因?yàn)樘摂M機(jī)對性能的影響很大,JVM 對性能的影響有兩方面:

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

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

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

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

實(shí)驗(yàn)一 基本類型迭代

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

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

一探究竟Java 8的Stream API性能

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

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

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

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

一探究竟Java 8的Stream API性能


分析,對于基本類型:

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

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

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

實(shí)驗(yàn)二 對象迭代

再來看對象的迭代效果。

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

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

一探究竟Java 8的Stream API性能


結(jié)果分析如下:

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

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

再來單獨(dú)考察 Stream 并行迭代效果:

一探究竟Java 8的Stream API性能

分析,對于對象類型:

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

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

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

實(shí)驗(yàn)三 復(fù)雜對象歸約

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

測試內(nèi)容:給定訂單列表,統(tǒng)計(jì)每個(gè)用戶的總交易額。對比使用外部迭代手動實(shí)現(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 并行效果逐漸變好,多核帶來的效果明顯。

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

結(jié)論

上述三個(gè)實(shí)驗(yàn)的結(jié)果可以總結(jié)如下:

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

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

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

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

對于復(fù)雜操作,推薦使用 Stream API,

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

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

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

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

    關(guān)注

    20

    文章

    3005

    瀏覽量

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

    關(guān)注

    2

    文章

    2465

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    探究C8051F040/1/2/3/4/5/6/7 8K ISP FLASH MCU家族的強(qiáng)大性能與應(yīng)用潛力

    探究C8051F040/1/2/3/4/5/6/7 8K ISP FLASH MCU家族的強(qiáng)大性能與應(yīng)用潛力 在電子工程師的日常工作中,選擇款合適的微控制器(MCU)至關(guān)重要。今天我
    的頭像 發(fā)表于 04-15 10:55 ?111次閱讀

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

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

    鐵路乘務(wù)員手持檢票智能終端PDA是什么?其五大核心功能全解析

    本文將深入解析火車/高鐵乘務(wù)員手中的“工作神機(jī)”,全能型手持檢票智能終端(PDA)。它如何在個(gè)手掌大小的設(shè)備中,完美融合身份證識別、護(hù)照讀取、極速驗(yàn)票、智能巡檢與實(shí)時(shí)通信五大核心功能?讓我們一探究竟。
    的頭像 發(fā)表于 01-15 14:39 ?298次閱讀
    鐵路乘務(wù)員手持檢票智能終端PDA是什么?其五大核心功能全解析

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

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

    教你如何使用API

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

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

    規(guī)格書標(biāo)注的最大電壓 ≠ 安全電壓!警惕電阻的過載失效風(fēng)險(xiǎn)

    各位電子工程師同行,是否曾有這樣的困惑:“明明按照規(guī)格書標(biāo)注的最大工作電壓使用電阻,為何它還是提前失效了?”這背后可能隱藏著個(gè)容易被忽視的關(guān)鍵因素,今天以我們自研產(chǎn)品為例一探究竟
    的頭像 發(fā)表于 08-13 10:45 ?1217次閱讀
    規(guī)格書標(biāo)注的最大電壓 ≠ 安全電壓!警惕電阻的過載失效風(fēng)險(xiǎn)

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

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

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

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

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

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

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

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

    一探究竟差分晶振

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

    數(shù)字隔離器與傳統(tǒng)隔離技術(shù):誰是電路安全的新寵

    在電子設(shè)備里,不同電壓的電路就像住在同棟樓卻互不往來的鄰居,為了讓它們能安全 “交流”,就需要隔離技術(shù)來幫忙。如今,數(shù)字隔離器和傳統(tǒng)隔離技術(shù)之間的競爭愈發(fā)激烈,到底誰更厲害?我們從下面幾個(gè)方面來一探究竟。
    的頭像 發(fā)表于 06-27 17:08 ?718次閱讀

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

    在顯示技術(shù)不斷迭代的浪潮中,MiP(Micro LED-in-Package)器件(無襯底芯片)顯示技術(shù)(下文簡稱:MiP),正以其獨(dú)特的優(yōu)勢和創(chuàng)新的架構(gòu),成為行業(yè)矚目的焦點(diǎn)。這項(xiàng)技術(shù)究竟有何魔力,能在眾多顯示技術(shù)中脫穎而出,甚至有望改寫行業(yè)規(guī)則?讓我們一探究竟。
    的頭像 發(fā)表于 05-27 11:38 ?1892次閱讀
    江口县| 盐源县| 贡山| 黔东| 东源县| 富锦市| 弥勒县| 建始县| 临漳县| 张家界市| 修水县| 尼勒克县| 武夷山市| 同仁县| 广昌县| 绿春县| 土默特左旗| 西丰县| 临桂县| 昌吉市| 大庆市| 汉川市| 武功县| 滦平县| 分宜县| 利川市| 乐山市| 府谷县| 吉木乃县| 赤峰市| 宝山区| 枣阳市| 绵竹市| 雷山县| 柞水县| 奎屯市| 阿坝| 青龙| 正定县| 娄烦县| 孝义市|