Java程序性能優化之性能概述


性能的基本概念

一)、什么叫程序的性能?

程序運行所需的內存和時間。

二)、性能的表現形式:

1).執行速度: 程序的反應是否迅速,響應時間是否足夠短。

2).啟動時間:程序從運行到可以處理正常業務所需要的時間。

3).內存分配: 內存分配是否合理,是否過多的消耗內存或者存在泄露

4).負載承受能力: 當系統壓力上升時,系統的執行速度、響應時間的上升曲線是否平緩。

三)、衡量性能的基本指標:

1).執行時間:一段代碼從開始到結束所需的時間。

2).CPU時間:函數或線程占用CPU的時間。

3).內存分配:程序在運行時所占用內存的空間。

4).磁盤吞吐量:磁盤I/O的使用情況。

5).網絡吞吐量:網絡的使用情況。

6).響應時間:系統對某用戶行為或者事件作出響應的時間。

四)、木桶原理

什么叫木桶原理?

一個木桶能乘多少水不取決於最高的那塊木板,而取決於最短那一塊。

一個系統的總體性能不取決於系統性能表現最好的組件,而取決於性能表現最差的組件。

五)、什么叫性能瓶頸?

木桶中最短的那一個木板,影響系統的總體性能,系統性能表現最差的組件。

六)、系統的性能瓶頸類型:

根據應用的特點不同,任何計算機資源都有可能成為系統瓶頸。

七)、可能成為系統瓶頸的計算資源:

1).磁盤I/O: 讀寫速度慢。

2).網絡操作: 網絡環境的不確定性,會導致網絡操作速度慢。

3).CPU: 對資源要求較高的應用,長時間、大量的占用資源,對CPU的爭奪也會導致性能問題。

4).異常: 異常的捕獲和處理非常消耗資源。

5).數據庫: 海量數據的讀寫操作相當費時。

6).鎖競爭: 鎖競爭會明顯增加線程上下文的開銷。

7).內存: 內存大小不足,應用程序只能盡可能的將常用的核心數據讀入內存。

八)、Amdahl(阿姆達爾)定律

參考:https://blog.csdn.net/thinkpad_zj/article/details/80240787

定義了加速比與系統並行度和處理器數量的關系

加速比:

加速比 = 1 / ( 串行化比重 + (並行化比重 / cpu數量))

加速比越高,程序性能優化越好。

程序性能優化效果取決於串行化比重和cpu數量,串行化比重越低,CPU數量越多,則優化效果越好。

串行: 只能一個人去做這件事

例如:燒開水,燒一壺開水 ,水開時間要2分鍾,你增加多幾個人在那里燒,但開水開的時間是不可變的。

並行: 可以多個人去干這件事

例如:掃地,一個人需要2分鍾,多加一個人要1分鍾,人越多掃地用時越短

九)、性能調優

性能調優的分類:

1).設計調優: 在軟件開發前執行,評估系統的潛在問題,規避某一組件的執行問題

2).代碼調優: 在軟件開發過程中,在軟件開發完成后,在軟件維護過程中對程序代碼進行改進和優化

                要求:熟悉相關的語言的API, 對算法,數據結構靈活運用

3).JVM調優: 系統運行期, 設置合理的JVM啟動參數

                    JVM是java軟件的運行平台,JVM的各項參數會直接影響java程序的性能。例如:JVM堆的大小、

                    垃圾回收策略

                     要求:了解JVM的運行原理和基本內存結構。

4).數據庫調優:

4.1 、在應用層對sql語句進行優化

例:在對大量擁有相同結構的查詢使用PrepareStatement,不使用statement

            在使用select查詢時,避免使用星號

	4.2、對數據庫進行優化

建立具有良好表結構的數據庫

例:使用表分區技術,建立索引

4.3、對數據庫軟件進行優化

例:設置合理大小的共享池、緩存緩沖區

5).操作系統調優

十)、性能優化的步驟

確立性能目標 -----》 對軟件進行性能測試 -------- 》若未達到性能目標 ------- 》找出系統瓶頸並改進 ----- 》繼續測試 ----- 》直至達到所需的性能目標


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM