成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

90%的 Java 程序員被誤導的一個性能優化策略!

開發 后端
我們經常看到一些 Java 性能優化的書或者理念,說不要在循環內定義變量,這樣會占用過多的內存影響性能,而要在循環外面定義。接觸 Java 這么久以來,相信很多 Java 程序員都被這種代碼性能優化策略所誤導。

90 % Java程序員被誤導的一個性能優化策略

我們經常看到一些 Java 性能優化的書或者理念,說不要在循環內定義變量,這樣會占用過多的內存影響性能,而要在循環外面定義。接觸 Java 這么久以來,相信很多 Java 程序員都被這種代碼性能優化策略所誤導。

看下面兩個示例,示例1在循環外定義變量,示例2是在循環內定義變量。

 

  1. /**  
  2.  * 循環外定義變量  
  3.  */  
  4. private static void outer() {  
  5.     Javastack javastack = null 
  6.     for (int i = 0; i < 10; i++) {  
  7.         javastack = new Javastack();  
  8.     }  
  9.  
  10.  
  11. /**  
  12.  * 循環內定義變量  
  13.  */  
  14. private static void inner() {  
  15.     for (int i = 0; i < 10; i++) {  
  16.         Javastack javastack = new Javastack();  
  17.     } 

 

先來分析這兩個示例吧。

循環外定義變量

循環外定義變量,變量循環內每次引用指向不同的對象實例,每次循環變更對象實例時,上一次被指向的對象就會被銷毀,直到***一個循環。這樣,循環結束后,這個變量還存在,并指向循環內***一個對象實例,其他對象都銷毀了。

這樣,本應該是循環體內的生命周期變量被擴散到了循環外,如果循環外依舊用這個變量,會導致后面的業務發生不可預知的后果。這種問題在筆者工作當中經常會遇到,看下面的例子。

 

  1. /**  
  2.  * 循環外定義變量  
  3.  */  
  4. private static void outer() {  
  5.     Javastack javastack1 = null 
  6.     for (int i = 0; i < 10; i++) {  
  7.         javastack1 = new Javastack();  
  8.     }  
  9.  
  10.    Javastack javastack2 = userDao.getUser(10);  
  11.  

 

上面定義了一個 javastack2 ,如果此時在后續代碼或者傳遞到別的方法時寫錯了,用了 javastack1,那這時不就有問題了嗎?這只是一方面,還有如果用同一變量名,當這一變量被重用時發生異常,本來發生異常應該是 null 值的,結果得到了是之前循環體內的值。

循環內定義變量

循環內定義變量,和循環外略有不同的是,每次都會創建新的局部變量指向新的對象實例,每個變量和對象的生命周期僅限于在循環體之內,而且每次循環結束該局部變量和對象實例都會隨著循環體的結束而銷毀,所以不存在占用更多的內存這一說法。

總結

兩種用法都會創建相同數量的對象實例,只不過循環內會反復創建相同數量的局部變量,棧內存垃圾回收頻率也會更高,但對于堆垃圾回收帶來的性能影響和變量生命周期帶來的業務影響來說,棧內存這點性能影響可以忽略不計。

所以,建議使用循環內定義變量,這種把變量的生命周期限制在循環體范圍內,也不會出現業務上重用變量而導致嚴重的問題。

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2020-02-22 21:51:43

程序員Microsoft SServerSQL

2019-05-30 10:46:19

程序員應聘項目

2018-11-29 15:00:27

Java應用程序性能指標

2014-01-06 09:33:32

程序員管理

2017-11-14 11:28:49

程序員索引數據

2019-07-18 12:40:49

Java編程語言性能優化

2015-06-08 10:48:39

程序員程序員自白

2011-02-14 13:05:17

PythonWeb

2015-06-16 10:31:36

程序員

2020-07-10 09:55:15

程序員技能開發者

2011-11-24 14:20:24

Java

2020-10-05 21:13:37

程序員技能開發者

2019-08-22 10:07:33

程序員開發危機

2015-08-24 10:07:13

程序員bug

2020-01-06 09:53:29

程序員

2010-10-18 11:39:41

程序員

2015-05-13 14:06:03

程序員糟糕的程序員

2019-11-07 15:30:00

EmacsIDE

2011-10-31 09:14:35

程序員

2009-02-12 15:07:57

程序員創業經驗
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 另类专区成人 | 久久精品成人 | 欧美成人一区二区三区 | 欧美精品tv| 国产精品7777777 | 天天干天天插 | 国产成人精品网站 | 欧美a区| 亚洲欧美日韩在线 | 国产成人一区二区三区电影 | 综合久久久 | 99视频免费在线 | 欧美一区2区三区3区公司 | 精品亚洲一区二区三区 | 久草新在线 | www.788.com色淫免费 | 欧美国产亚洲一区二区 | 日日噜噜噜夜夜爽爽狠狠视频97 | 久草精品视频 | 在线观看中文字幕dvd播放 | 欧美成人精品一区二区男人看 | 日韩成人av在线 | 男插女下体视频 | 夜夜草天天草 | 欧美精品一区二区三区四区 在线 | 中文字幕视频在线 | 久久精品国产99国产精品 | 亚洲精品美女 | 中文字幕av在线播放 | 九九久久精品视频 | 国产欧美日韩在线播放 | 国产三级在线观看播放 | 国产人成在线观看 | 日韩高清www| a毛片| 男人的天堂在线视频 | 精品国产乱码久久久久久影片 | 国产精品久久久久久久粉嫩 | 国产在线拍偷自揄拍视频 | 中文字幕在线免费观看 | 久久国产精品-国产精品 |