①. 在Java編程語言和環境中,.java文件編譯成.class文件後,須要經過解析器將字節碼轉換成本地機器碼才能運行java
②. 爲了節約內存和執行效率,代碼在最初被執行時,解析器會率先解析執行這段代碼算法
③. 隨着代碼被執行的次數增長,當JVM發現某個方法或代碼塊運行得很頻繁時,就會把這些代碼認定爲熱點代碼編程
④. 所以在剛開始運行的階段,JVM會花費很長的時間來全面優化代碼,後面就能以最高性能運行了設計模式
①. 不穩定因素:機器其餘進程的影響、網絡波動、JVM GC的不肯定性 ①. 解決方案:經過屢次測試,將測試結果求平均,只要能保證平均值在一個合理的範圍以內,而且波動不大便可性能優化
①. 任意一個JVM都擁有整個系統的資源使用權 ②. 若是一臺機器上只部署單獨的一個JVM,在作性能測試時,測試結果會很好,但一臺機器上有多個JVM,則不必定 ③. 儘可能避免線程環境一臺機器部署多個JVM服務器
1.完成性能測試以後,須要輸出一份性能測試報告,測試結果須要包括網絡
2.經過觀察性能指標,能夠發現性能瓶頸,再經過自下而上的方式分析查找問題併發
3.分析查找性能問題能夠採用自下而上的方式,而解決性能問題,通常採用自上而下的方式逐級優化編程語言
思路:業務調優 -> 編程調優 -> 系統調優高併發
1.應用層的問題代碼每每會由於耗盡系統資源而暴露出來
2.例如某段代碼致使內存溢出,這每每是將JVM的內存耗盡了
3.還有一些非問題代碼致使的性能問題,比較難以發現
1.面向對象有不少設計模式,能夠用於優化業務層以及中間件層的代碼設計,進而達到精簡代碼和提升總體性能的目的
2.例如單例模式在頻繁建立對象的場景中,能夠共享一個對象,減小頻繁建立和銷燬對象帶來的性能開銷
1.合適的算法能夠大大提高系統性能
2.例如在不一樣的場景中,使用合適的查找算法能夠下降時間複雜度
1.若是系統對查詢的速度沒有很高的要求,但對存儲空間要求苛刻,能夠考慮用時間換空間
2.例如String的intern方法,能夠將重複率比較高的數據存儲在常量池,重複使用相同的對象,大大節省內存空間
1.使用存儲空間來提高訪問速度 2.例如MySQL的分庫分表
1.根據業務場景,合理地設置JVM的內存空間和GC算法 2.另外,合理地設置Web容器的線程池大小和Linux操做系統的內核參數
1.性能優化策略,主要爲了提升系統性能,而兜底策略,主要爲了確保系統的穩定性
2.限流
3.智能橫向擴容
4.提早擴容
5.Kubernetes能夠實現智能橫向擴容和提早擴容Docker服務