最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解lambda表達(dá)式foreach性能分析

 更新時(shí)間:2020年11月06日 10:27:08   作者:shaoyangdd  
這篇文章主要介紹了詳解lambda表達(dá)式foreach性能分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

java 8的新特性之一就是lambda表達(dá)式,parallelStream()都說性能會比較高,現(xiàn)一探究竟。

話不多說,上代碼:

 @Test
  public void test2(){

    List<String> list = new ArrayList<>();
    for(int i=0;i<10000;i++)
      list.add(String.valueOf(i));
    //lambda表達(dá)式
    long start = System.currentTimeMillis();
//    list.parallelStream().forEach((s)->{
//      s.toString();
//    });
    //普通測試
    for (Object s :list){
      s.toString();
    }
    long end = System.currentTimeMillis();
    System.out.println("耗時(shí):"+(end-start) +" ms");
  }

測試結(jié)果如下:

   

普通fo循環(huán)耗時(shí)3ms。           

為何lambda表達(dá)式的性能比普通的還差,我猜測是因?yàn)椋簂ist.parallelStream()是并發(fā)處理的,大量的線程上下文切換導(dǎo)致性能下降。如何證明?那就把for循環(huán)里的處理時(shí)間設(shè)置長一點(diǎn)吧,設(shè)置成如下代碼:

  public void test1(){

    List<String> list = new ArrayList<>();
    for(int i=0;i<10000;i++)
      list.add(String.valueOf(i));
    //lambda表達(dá)式
    long start = System.currentTimeMillis();
//    list.parallelStream().forEach((s)->{
//      try {
//        Thread.sleep(4);
//      } catch (InterruptedException e) {
//        e.printStackTrace();
//      }
//    });
    //普通測試
		for (Object s :list){
			try {
				Thread.sleep(4);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			s.toString();
		}
    long end = System.currentTimeMillis();
    System.out.println("耗時(shí):"+(end-start) +" ms");
  }

測試結(jié)果:

普通耗時(shí):13454ms

 lambda表達(dá)式耗時(shí)3314秒。

果然如老夫所料。

再次驗(yàn)證list.parallelStream()是多線程執(zhí)行, 用visualVM工具看運(yùn)行時(shí)的線程情況,如下:

 普通for循環(huán)只有主線程在處理。

lambda表達(dá)式的啟了三個(gè)worker線程處理。

再一次驗(yàn)證了我的想法。

所以結(jié)論是:對于耗時(shí)的操作用lambda表達(dá)式的for循環(huán),如數(shù)據(jù)庫的IO操作,多線程充分利用CPU資源;對于不太耗時(shí)的操作使用普通for循環(huán),比如純CPU計(jì)算類型的操作,單線程性能更高,減少上下文切換的開銷。

到此這篇關(guān)于詳解lambda表達(dá)式foreach性能分析的文章就介紹到這了,更多相關(guān)lambda表達(dá)式foreach性能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javac final變量未賦值檢測案例講解

    javac final變量未賦值檢測案例講解

    這篇文章主要介紹了javac final變量未賦值檢測案例講解,通過本文,我們可以知道Eclipse中報(bào)如下錯(cuò)誤:The blank final field b may not have been
    initialized. 是在Flow階段由AssignAnalyzer檢測出來的,需要的朋友可以參考下
    2022-12-12
  • log4j2的高并發(fā)死鎖問題配置優(yōu)化方式

    log4j2的高并發(fā)死鎖問題配置優(yōu)化方式

    這篇文章主要介紹了log4j2的高并發(fā)死鎖問題配置優(yōu)化方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JDBC用法小結(jié)

    JDBC用法小結(jié)

    這篇文章主要介紹了JDBC用法,較為詳細(xì)的分析了基于JDBC進(jìn)行數(shù)據(jù)庫操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • springboot集成PageHelper分頁失效的原因及解決

    springboot集成PageHelper分頁失效的原因及解決

    項(xiàng)目啟動初期,在集成mybatis的分頁插件,自定義封裝了一個(gè)分頁的工具類,方便后期項(xiàng)目的擴(kuò)展,結(jié)果無法分頁了,怎么設(shè)置搞都沒辦法正常分頁,所以本文將給大家介紹一下springboot集成PageHelper分頁失效的原因及解決,需要的朋友可以參考下
    2023-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計(jì)算器的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計(jì)算器的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中棧與綜合計(jì)算器的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2022-10-10
  • springmvc開啟異步請求報(bào)錯(cuò)Java code using the Servlet API or

    springmvc開啟異步請求報(bào)錯(cuò)Java code using the Ser

    這篇文章主要為大家介紹了springmvc開啟異步請求報(bào)錯(cuò)Java code using the Servlet API or解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • Java加密算法RSA代碼實(shí)例

    Java加密算法RSA代碼實(shí)例

    這篇文章主要介紹了Java加密算法RSA代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳

    詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳

    本篇文章主要介紹了SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳,本地的文件上傳到資源服務(wù)器上,比較好的辦法就是通過ftp上傳。這里是結(jié)合SpringMVC+ftp的形式上傳的,有興趣的可以了解一下。
    2016-12-12
  • Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)

    Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)

    這篇文章主要為大家介紹了Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解

    Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解

    這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解,在使用Netty進(jìn)行TCP消息傳輸時(shí),為了上層協(xié)議能夠?qū)ο⒄_區(qū)分,避免粘包和拆包導(dǎo)致的問題,一般可以通過消息定長、將回車換行符作為消息結(jié)束符,需要的朋友可以參考下
    2023-12-12

最新評論

衡阳县| 赣州市| 鄄城县| 故城县| 文登市| 内江市| 兴义市| 博野县| 视频| 友谊县| 乳山市| 萝北县| 将乐县| 阿鲁科尔沁旗| 安国市| 云南省| 镇平县| 阿尔山市| 鸡东县| 墨玉县| 祁东县| 拜泉县| 河曲县| 青神县| 本溪市| 邵阳市| 桃园县| 浙江省| 常宁市| 汉中市| 龙南县| 余庆县| 塘沽区| 安丘市| 府谷县| 灯塔市| 霍山县| 永平县| 怀来县| 保定市| 锡林郭勒盟|