亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java代碼優化的細節有哪些

發布時間:2021-10-22 16:31:47 來源:億速云 閱讀:163 作者:iii 欄目:編程語言

本篇內容主要講解“Java代碼優化的細節有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java代碼優化的細節有哪些”吧!

代碼優化的目標是:

減小代碼的體積

提高代碼運行的效率

代碼優化細節

1、盡量指定類、方法的final修飾符

帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String,整個類都是final的。為類指定final修飾符可以讓類不可以被繼承,為方法指定final修飾符可以讓方法不可以被重寫。如果指定了一個類為final,則該類所有的方法都是final的。Java編譯器會尋找機會內聯所有的final方法,內聯對于提升Java運行效率作用重大,具體參見Java運行期優化。此舉能夠使性能平均提高50% 。

2、盡量重用對象

特別是String對象的使用,出現字符串連接時應該使用StringBuilder/StringBuffer代替。由于Java虛擬機不僅要花時間生成對象,以后可能還需要花時間對這些對象進行垃圾回收和處理,因此,生成過多的對象將會給程序的性能帶來很大的影響。

3、盡可能使用局部變量

調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧中速度較快,其他變量,如靜態變量、實例變量等,都在堆中創建,速度較慢。另外,棧中創建的變量,隨著方法的運行結束,這些內容就沒了,不需要額外的垃圾回收。

4、及時關閉流

Java編程過程中,進行數據庫連接、I/O流操作時務必小心,在使用完畢后,及時關閉以釋放資源。因為對這些大對象的操作會造成系統大的開銷,稍有不慎,將會導致嚴重的后果。如果條件允許,即JDK7以上,強烈建議使用try-with-resources。

5、盡量減少對變量的重復計算

明確一個概念,對方法的調用,即使方法中只有一句語句,也是有消耗的,包括創建棧幀、調用方法時保護現場、調用方法完畢時恢復現場等。所以例如下面的操作:

Java代碼優化的細節有哪些

建議替換為:

Java代碼優化的細節有哪些

建議替換為:

Java代碼優化的細節有哪些

用移位操作可以極大地提高性能,因為在計算機底層,對位的操作是最方便、最快的,因此建議修改為:

Java代碼優化的細節有哪些

這種做法會導致內存中有count份Object對象引用存在,count很大的話,就耗費內存了,建議為改為:

Java代碼優化的細節有哪些

此時靜態變量b的生命周期與A類相同,如果A類不被卸載,那么引用B指向的B對象會常駐內存,直到程序終止。

18、及時清除不再需要的Session

為了清除不再活動的會話,許多應用服務器都有默認的會話超時時間,一般為30分鐘。當應用服務器需要保存更多的會話時,如果內存不足,那么操作系統會把部分數據轉移到磁盤,應用服務器也可能根據MRU(最近最頻繁使用)算法把部分不活躍的會話轉儲到磁盤,甚至可能拋出內存不足的異常。如果會話要被轉儲到磁盤,那么必須要先被序列化,在大規模集群中,對對象進行序列化的代價是很昂貴的。因此,當會話不再需要時,應當及時調用HttpSession的invalidate方法清除會話。

19、實現RandomAccess接口的集合比如ArrayList,應當使用最普通的for循環而不是foreach循環來遍歷

這是JDK推薦給用戶的。JDK API對于RandomAccess接口的解釋是:實現RandomAccess接口用來表明其支持快速隨機訪問,此接口的主要目的是允許一般的算法更改其行為,從而將其應用到隨機或連續訪問列表時能提供良好的性能。實際經驗表明,實現RandomAccess接口的類實例,假如是隨機訪問的,使用普通for循環效率將高于使用foreach循環;反過來,如果是順序訪問的,則使用Iterator會效率更高。可以使用類似如下的代碼作判斷:

Java代碼優化的細節有哪些

建議修改為:

Java代碼優化的細節有哪些

C/C++判斷”i==1″不成立,所以以0表示,即false。但是如果:

Java代碼優化的細節有哪些

這樣,即使開發者不小心寫成了”1 = i”,C/C++編譯器也可以第一時間檢查出來,因為我們可以對一個變量賦值i為1,但是不能對一個常量賦值1為i。

但是,在Java中,C/C++這種”if (i = 1)”的語法是不可能出現的,因為一旦寫了這種語法,Java就會編譯報錯”Type mismatch: cannot convert from int to boolean”。但是,盡管Java的”if (i == 1)”和”if (1 == i)”在語義上沒有任何區別,但是從閱讀習慣上講,建議使用前者會更好些。

30、不要對數組使用toString方法

看一下對數組使用toString打印出來的是什么:

Java代碼優化的細節有哪些

本意是想打印出數組內容,卻有可能因為數組引用is為空而導致空指針異常。不過雖然對數組toString沒有意義,但是對集合toString是可以打印出集合里面的內容的,因為集合的父類AbstractCollections重寫了Object的toString方法。

31、不要對超出范圍的基本數據類型做向下強制轉型

這絕不會得到想要的結果:

Java代碼優化的細節有哪些

運行結果為:

Java代碼優化的細節有哪些

如果你只是想遍歷一下這個Map的key值,那用”Set keySet = hm.keySet;”會比較合適一些

35、對資源的close建議分開操作

意思是,比如我有這么一段代碼:

Java代碼優化的細節有哪些

雖然有些麻煩,卻能避免資源泄露。我想,如果沒有修改過的代碼,萬一XXX.close拋異常了,那么就進入了cath塊中了,YYY.close不會執行,YYY這塊資源就不會回收了,一直占用著,這樣的代碼一多,是可能引起資源句柄泄露的。而改為上面的寫法之后,就保證了無論如何XXX和YYY都會被close掉。如果JDK7以上,強烈建議使用try-with-resources。

到此,相信大家對“Java代碼優化的細節有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍林郭勒市| 龙江县| 正阳县| 阜宁县| 婺源县| 获嘉县| 闵行区| 唐海县| 区。| 淮滨县| 逊克县| 城固县| 新泰市| 东宁县| 金乡县| 宝丰县| 西乡县| 阜城县| 彭泽县| 皋兰县| 军事| 泰和县| 安溪县| 武隆县| 宝鸡市| 韩城市| 盈江县| 新宁县| 廊坊市| 白沙| 常德市| 宿迁市| 班戈县| 宁都县| 北川| 宝丰县| 赤城县| 灵川县| 凉城县| 错那县| 北京市|