日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

菜鸟要做架构师(二)——java性能优化之for循环

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 菜鸟要做架构师(二)——java性能优化之for循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

完成同樣的功能,用不同的代碼來實現,性能上可能會有比較大的差別,所以對于一些性能敏感的模塊來說,對代碼進行一定的優化還是很有必要的。今天就來說一下java代碼優化的事情,今天主要聊一下對于for(while等同理)循環的優化。


作為三大結構之一的循環,在我們編寫代碼的時候會經常用到。循環結構讓我們操作數組、集合和其他一些有規律的事物變得更加的方便,但是如果我們在實際開發當中運用不合理,可能會給程序的性能帶來很大的影響。所以我們還是需要掌握一些技巧來優化我們的代碼的。


嵌套循環

stratTime = System.nanoTime();for (int i = 0; i < 10000000; i++) {for (int j = 0; j < 10; j++) {}}endTime = System.nanoTime();System.out.println("外大內小耗時:"+ (endTime - stratTime));

?

應改為:

stratTime = System.nanoTime();for (int i = 0; i <10 ; i++) {for (int j = 0; j < 10000000; j++) {}}endTime = System.nanoTime();System.out.println("外小內大耗時:"+(endTime - stratTime));


兩者耗時對比:

外大內小耗時:200192114 外小內大耗時:97995997

由以上對比可知,優化后性能提升了一倍,嵌套循環應該遵循“外小內大”的原則,這就好比你復制很多個小文件和復制幾個大文件的區別。


提取與循環無關的表達式

fstratTime = System.nanoTime();for (int i = 0; i < 10000000; i++) {i=i*a*b;}endTime = System.nanoTime();System.out.println("未提取耗時:"+(endTime - stratTime));


應改為:

stratTime = System.nanoTime();c = a*b;for (int i = 0; i < 10000000; i++) {i=i*c;}endTime = System.nanoTime();System.out.println("已提取耗時:"+(endTime - stratTime));

?

兩者耗時對比:

未提取耗時:45973050 已提取耗時:1955

代碼中a+b與我們的循環無關,所以應該把它放到外面,避免重復計算,可以看出,優化后性能提升了好幾個數量級,這些是不容忽視的。


消除循環終止判斷時的方法調用

stratTime = System.nanoTime();for (int i = 0; i < list.size(); i++) {}endTime = System.nanoTime();System.out.println("未優化list耗時:"+(endTime - stratTime));

?

應改為:

stratTime = System.nanoTime();int size = list.size();for (int i = 0; i < size; i++) {}endTime = System.nanoTime();System.out.println("優化list耗時:"+(endTime - stratTime));


兩者耗時對比:

未優化list耗時:27375 優化list耗時:2444

list.size()每次循環都會被執行一次,這無疑會影響程序的性能,所以應該將其放到循環外面,用一個變量來代替,優化前后的對比也很明顯。


異常捕獲

stratTime = System.nanoTime();for (int i = 0; i < 10000000; i++) {try {} catch (Exception e) {}}endTime = System.nanoTime();System.out.println("在內部捕獲異常耗時:"+(endTime - stratTime));


應改為:

?

stratTime = System.nanoTime();try {for (int i = 0; i < 10000000; i++) {}} catch (Exception e) {}endTime = System.nanoTime();System.out.println("在外部捕獲異常耗時:"+(endTime - stratTime));

?兩者耗時對比:

在內部捕獲異常耗時:12150142 在外部捕獲異常耗時:1955


大家都知道,捕獲異常是很耗資源的,所以不要講try?catch放到循環內部,優化后同樣有好幾個數量級的提升。


性能優化的內容有很多,代碼優化只是其中一小部分,我們在日常開發中應養成良好的編碼習慣。接下來會跟大家探討更多關于性能優化的內容,希望大家積極交流指導。


from:?http://www.cnblogs.com/liushuijinger/p/4126928.html

總結

以上是生活随笔為你收集整理的菜鸟要做架构师(二)——java性能优化之for循环的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。