首頁>Club>
從程式碼細節上舉例。
6
回覆列表
  • 1 # 千鋒武漢

    Java是面向物件程式語言,具有功能強大、簡單易用兩大特徵。很多人表示Java執行速度慢,有嚴重的效能問題,其實這與Java無關,而是涉及到Java應用的效能最佳化。

    接下來就給大家分享Java效能最佳化的常用方法。

    1、設計最佳化

    設計最佳化處於效能最佳化手段的上層,它需要在軟體開發之前進行。在軟體開發之前,系統架構師應該就評估系統可能存在的各種潛在問題和技術難點,並給出合理的設計方案,是對系統”質”的最佳化。進行設計最佳化時,設計人員和必須熟悉經常使用的設計方法、設計模式,以及主要的效能元件和經常使用的最佳化思想,並將其有機地整合在軟體系統中。

    2、程式碼最佳化

    程式碼調優是在軟體開發中,或者是軟體開發完畢後,軟體維護過程中進行的程式程式碼的改進和最佳化。程式碼最佳化涉及諸多編碼技巧,需要開發者熟悉相關的語言API ,並在適合的場景中正確的使用相關API或類庫,同時對演算法、資料結構的靈活使用也是程式碼最佳化的一個重要內容。

    3、JVM最佳化

    作為Java軟體的執行平臺,JVM的各項引數將會直接影響Java程式的效能,比如JVM的堆大小、垃圾回收策略等等。要進行JVM層面的調優,需要開發者對JVM的執行原理和基本記憶體結構有一定的瞭解,如堆記憶體的結構、GC的種類等,然後根據引用程式的特點設定合理的JVM啟動引數。

    4、資料庫最佳化

    對資料庫的調優能夠分為三個部分:1)在應用層對SQL語句進行最佳化時會涉及大量的程式設計技巧;2)在對資料庫最佳化時主要目的是建立一個具有良好表結構的資料庫;3)對資料庫軟體進行最佳化。

    5、作業系統最佳化

    作業系統調優的手段和引數可能有所不同,比如在主流Unix系統中,共享記憶體段、訊號量、共享記憶體最大值(shmmax)、共享記憶體最小值(shmmin)等都是能夠進行最佳化的系統資源。此外,如最大檔案控制代碼數、虛擬記憶體大小、磁碟的塊大小等引數都可能對軟體的效能產生影響。

  • 2 # 千鋒頭號粉絲

    程式碼最佳化是對程式程式碼進行交換,以實現精簡程式碼、清除程式碼垃圾的目的。有很多新手Java程式設計師想知道程式碼最佳化的方法有哪些,還有很多想要轉行學Java的同學想知道2020年學Java就業前景如何,接下來就給大家簡單分析一下。

    Java程式碼最佳化的方法有哪些?

    1)儘量指定類、方法的final修飾符。帶有final修飾符的類是不可派生的,Java編譯器會尋找機會內聯所有的final方法,內聯對於提升Java執行效率作用重大,此舉能夠使效能平均提高50%。

    2)儘量重用物件。由於Java虛擬機器不僅要花時間生成物件,以後可能還需要花時間對這些物件進行垃圾回收和處理,因此生成過多的物件將會給程式的效能帶來很大的影響。

    3)儘可能使用區域性變數。呼叫方法時傳遞的引數以及在呼叫中建立的臨時變數都儲存在棧中速度較快,其他變數,如靜態變數、例項變數等,都在堆中建立速度較慢。

    4)慎用異常。異常對效能不利,只要有異常被丟擲,Java虛擬機器就必須調整呼叫堆疊,因為在處理過程中建立了一個新的物件。異常只能用於錯誤處理,不應該用來控制程式流程。

    5)乘法和除法使用移位操作。用移位操作可以極大地提高效能,因為在計算機底層,對位的操作是最方便、最快的,但是移位操作雖然快,可能會使程式碼不太好理解,因此最好加上相應的註釋。

    6)儘量使用HashMap、ArrayList、StringBuilder,除非執行緒安全需要,否則不推薦使用 Hashtable、Vector、StringBuffer,後三者由於使用同步機制而導致了效能開銷。

    7)儘量在合適的場合使用單例。使用單例可以減輕載入的負擔、縮短載入的時間、提高載入的效率,但並不是所有地方都適用於單例。

  • 3 # SITTOL

    一,減少記憶體佔用,二,減少IO操作

    從程式碼分析,是否有過多的巢狀for迴圈,是否有過多的sql操作等

  • 4 # 會點程式碼的大叔

    沒有系統地整理過,就說一些常見的吧,想到什麼說什麼,有一些關於程式碼細節,有些可能是一些方法和習慣。

    避免過多地建立Java物件:比如在迴圈中建立物件,建立和回收都需要花費時間;

    儘量使用區域性變數,或者換一句換說,要根據變數的作用域,把變數定義在合適的地方;

    儘量減少計算/操作:這裡其實要注意的點很多,一個簡單的例子,入參給了10個ID去查詢資料庫,是迴圈10遍執行where id=?,還是執行1遍where id in(list);

    使用StringBuffer、Collection的時候,如果能夠確認長度/元素數量的話,儘量指定長度/元素數量;因為預設值是比較小的,當它們在做擴充套件的時候,會有一定效能損耗;

    基本資料型別轉為字串,用toString()而不是+"";

    在finally塊中關閉Stream,要養成好習慣;

    儘量少使用正則表示式;非要用的話,儘量把Pattern快取下來;

    如果要多執行緒處理,請使用執行緒池;

    如果不是必須,用HashMap、ArrayList,而不是HashTable、Vector;根據需要選擇使用ArrayList還是LinkedList,反正我一般都是用ArrayList;

    在必要的時候捕捉異常,並且不要透過異常控制程式碼邏輯和業務流程;

    一些在資料庫中的配置引數(不會經常變化),可以在專案啟動的時候或第一次使用的時候,從資料庫中查詢出來,放到記憶體或快取中;不要每次用的時候都去資料庫裡面查一遍;

    接上條,儘量使用懶載入,也就是專案啟動的時候建立or第一次使用的時候建立,選擇後者;

    有些開發人員喜歡用HashMap放一些快取資料,不如直接使用開源的快取框架,他們會做的更好;

    能在客戶端做的話,就不要在服務端做;能在服務端程式裡面做的話,就不要在資料庫裡面做;比如要做where time > sysdate-1,那麼就在程式中把sysdate-1算出來,再交給SQL。

  • 中秋節和大豐收的關聯?
  • 有沒有具有啟迪意義的經典電影推薦?