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

11個值得掌握的Java代碼性能優化技巧

開發 前端
在開發任何Java應用的時候,我們都會談及optimization——優化的概念。作為一個開發者,我們應該盡可能地保證自己寫的代碼干凈、沒有缺陷,并且盡可能地考慮性能問題。為此,筆者總結了以下11個你肯定會用到的Java代碼性能優化的技巧。

1.避免方法過長

我們在定義一個方式的時候,應該考慮到一個方法不應該太長,它就應該是專門是來執行單一功能的。這樣其實對維護和性能都有好處。

一方面,從維護角度來說,適當長度的方法易讀性更強,更容易理解;另一方面,在類的加載和方法調用的過程中,方法會被加載到內存中。如果一個方法太大,處理起來就需要消耗額外的內存和CPU周期。我們應該學會在恰當的邏輯點上將一個長方法拆開。

2.避免多個if-else語句

對于這個優化點,大家應該很熟悉了。但是實際在寫代碼的時候,還是if-else一擼到底。

這樣做的話,其實也會影響性能。因為JVM必須對條件進行比較。如果在for、while等循環語句中使用同樣的條件,情況會變得更糟糕。

如果我們的業務邏輯中有很多的條件,我們可以嘗試著將這些條件分組并且返回一個布爾值,然后再將其用于if語句。

另外,如果可能的話,我們可以考慮使用switch語句來代替多個if-else。switch語句比if-else有性能優勢。 下面我們看一個例子:

if (condition1) {

if (condition2) {

if (condition3 || condition4) { execute ..}

else { execute..}

對比上面這段代碼,合適的做法應該如下:

boolean result = (condition1 && condition2) && (condition3  || condition4)

3.避免使用iterator

用Java5的foreach風格來寫循環確實很方便很簡潔,看起來就很酷!

但是有的時候耍酷是要付出性能的代價的。

例如:

for (String str: strs) {
. . .
}

每次運行代碼,如果strs是Iterable的,你將會創建一個新的Iterator對象。這樣做會導致更多內存的消耗。

如果你對性能有著極致的追求,那么還是建議你使用原始的寫法:

int size = strs.size();
for (int i = 0; i < size; i++) {
String value = strs.get(i);
. . .
}

4. 避免在集合中獲取size

在對任何集合進行迭代時,要事先得到集合的大小,而不是在迭代過程中得到它——這樣避免多次調用size()方法。

下面請看這個例子:

List<String> eleList = getData();
for (int i = 0; i < eleList.size(); i++) { execute code ..}

對比上面這段代碼,合適的做法應該如下:

List<String> objList = getData();
int size = objList.size();
for (int i = 0; i < size; i++) { execute code ..}

5.避免使用+號拼接字符串

從JDK5開始,Java編譯器就做了優化,使用+號拼接字符串,編譯器編譯后實際就自動優化為使用StringBuilder。

而且String是final類,用String創建的對象無法重復使用。因此,如果我們需要連續拼接,使用+號拼接字符串將導致創建多個String對象,從而會占用更多的堆內存。

一般來說,當字符串不多的時候,+號與StringBuilder的拼接效率其實相差無幾;但是如果涉及到單線程循環拼接的時候,我們最好還是使用StringBuilder以保證性能上的優化。

下面請看一個例子:

String str = "sample";
for (int i = 0; i < count; i++) {
str = str + "-" + i;
}

更合適的做法如下:

StringBuilder stringBuilder = new StringBuilder("sample");
for (int i = 0; i < count; i++) {
stringBuilder.append("-");
stringBuilder.append(i);
}

6.盡可能使用基本類型

因為基本類型存儲在棧內存中,而對象存儲在堆內存中。如果可以的話,我們應該盡可能使用基本類型而非對象,因為棧內存的訪問速度比堆內存快。

因此在某些情況下,定義一個變量或者數組,我們可以使用int而非Integer,double而非Double。

7.避免使用BigDecimal類

BigDecimal類提供了精確的小數值,過度使用這個對象會對性能造成影響,特別是當這個對象被用來在循環中計算某些數值時。

BigDecimal在進行計算時要比long或double占用更多的內存。如果精度不受限制,或者我們確認計算值的范圍不會超過long或double,我們可以避免使用BigDecimal,而使用long或double,并進行適當的轉換。

8.避免經常創建“代價昂貴”的對象

有一些類在應用程序中承載著數據,這些對象的創建開銷很大,我們應該避免多次創建。

比如說,數據庫連接對象,系統配置對象,或者是用戶登錄的會話對象。這些對象在創建的時候占用了大量資源,我們應該選擇重用這些對象,而不是再次創建。

對于這些"代價昂貴"的對象,我們盡可能使用單例模式來創建單一實例,并在需要的地方重用它。

9.使用PreparedStatement而不是Statement

現在應該比較少用JDBC API進行SQL查詢了,但是我覺得還是有必要了解一下。

對于參數化查詢,PreparedStatement比Statement更有優勢,因為PreparedStatement對象被編譯一次并執行多次。Statement對象在每次被調用時都會被編譯和執行。

此外,PreparedStatement對象是安全的,可以避免SQL注入攻擊。

10.避免使用不必要的日志語句和不正確的日志級別

這個建議應該是很普遍的,但是很多代碼忽略了這一點。我們在創建調試信息的時候,應該先檢查一下當前的日志級別。

否則你可能會無意之間創建一條無用的日志信息。 請看例子:

log.debug("User [" + userName + "] called method X with [" + i + "]");
log.debug(String.format("User [%s] called method X with [%d]", userName, i));

11.選擇SQL查詢中的必要字段

有時,我們需要寫SQL來獲取數據。此時我們應該避免選擇所有數據庫列,只選擇我們需要的數據庫列。

選擇太多的列會導致數據庫查詢執行的延遲,也會增加網絡流量。

請看示例:

select * from books where book_id = 6;

對此,我建議這么寫:

select book_title, book_desc, book_price from books where book_id = 6;

結語

很多人認為性能優化是一個復雜的話題,需要大量的經驗和知識,這在一定程度上是對的。

我們開發一個應用程序并且期望獲得盡可能好的性能并不是一件容易的事情。但是,即使你不是性能調優專家,也可以采取一些簡單的方法來提高性能。

責任編輯:華軒 來源: 今日頭條
相關推薦

2024-06-21 08:21:44

2021-11-18 08:20:22

接口索引SQL

2012-07-23 10:22:15

Python性能優化優化技巧

2009-11-27 13:24:20

PHP代碼性能優化

2017-11-17 08:56:59

Java性能優化技巧

2022-10-09 13:36:44

接口性能優化

2024-01-22 13:16:00

接口性能優化本地緩存

2024-04-12 08:28:38

優化查詢語句PostgreSQL索引

2011-06-14 11:14:10

性能優化代碼

2021-03-18 07:52:42

代碼性能技巧開發

2009-04-16 16:57:58

DotNetNuke優化網站開發

2024-11-18 19:00:29

2019-11-28 09:25:43

Java調優技巧

2020-03-25 08:00:32

Kubernetes節點工作

2015-09-16 14:47:14

Android性能優化代碼

2015-11-05 09:02:05

Java代碼性能優化

2022-11-28 11:31:37

2022-11-28 23:44:26

JavaScript技巧程序員

2024-09-26 15:00:06

2019-08-21 10:53:29

.NET性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线免费看 | 天天射色综合 | 五月激情久久 | 国产激情在线播放 | 欧美偷偷 | 久久99久久98精品免观看软件 | 婷婷丁香综合网 | 91免费版在线观看 | 欧美一区二区免费在线 | 九九热精 | www.亚洲成人网 | 欧美激情视频一区二区三区免费 | 亚洲国产精品一区二区三区 | 天堂va在线观看 | 黄色网址在线播放 | 中文字幕一级毛片视频 | 亚洲狠狠 | 日韩精品一区二区三区视频播放 | 91av在线电影 | 草久久 | 日韩二区 | 久久免费精品视频 | 高清欧美性猛交xxxx黑人猛交 | 97人人澡人人爽91综合色 | 亚洲高清视频在线 | 懂色一区二区三区免费观看 | 久久免费精品 | 精品久久久精品 | 99精品视频在线观看免费播放 | 91天堂| 精品av| 日日操夜夜操视频 | 99九九视频| 国产精品久久久久久久久久久新郎 | 久久精品国产久精国产 | 国产福利观看 | 欧美a∨ | 国产一区免费 | 美人の美乳で授乳プレイ | 三级av免费 | 国产欧美一区二区三区久久 |