這些年,隨著CPU、內存、I/O 設備都在不斷迭代,不斷朝著更快的方向努力。在這個快速發展的過程中,有一個核心矛盾一直存在,就是這三者的速度差異。CPU 和內存的速度差異可以形象地描述為:CPU 是天上一天,內存是地上一年(假設 CPU 執行一條普通指令需要一天,那么 CPU 讀寫內存得等待一年的時間)。內存和 I/O 設備的速度差異就更大了,內存是天上一天,I/O 設備是地上十年。
我們都知道的是,程序里大部分語句都要訪問內存,有些還要訪問 I/O,根據木桶理論(一只水桶能裝多少水取決于它最短的那塊木板),程序整體的性能取決于最慢的操作——讀寫 I/O 設備,也就是說單方面提高 CPU 性能是無效的。
為了合理利用 CPU 的高性能,平衡這三者的速度差異,計算機體系結構、操作系統、編譯程序都做出了貢獻,主要體現為:
現代計算機在CPU 增加了緩存,以均衡與內存的速度差異
操作系統增加了進程、線程,以分時復用 CPU,進而均衡 CPU 與 I/O 設備的速度差異
編譯程序優化指令執行次序,使得緩存能夠得到更加合理地利用
由此可見,雖然現在我們幾乎所有的程序都默默地享受著這些成果,但是實際應用程序設計和開發過程中,還是有很多詭異問題困擾著我們。
基本概述
每當提起Java性能優化,你是否有想過,真正需要我們優化的是什么?或者說,指導我們優化的方向和目標是否明確?甚至說,我們所做的一切,是否已經達到我們的期望了呢?接下來,我們來詳細探討一下。
性能優化根據優化的方向和目標來說,大致可以分為業務優化和技術優化。業務優化產生的影響是非常巨大的,一般最常見的就是業務需求變更和業務場景適配等,當然這是產品和項目管理的工作范疇。而對于我們開發人員來說,我們需要關注的和直接與我們相關的,主要是通過一系列的技術手段,來完成我們對既定目標的技術優化。其中,從技術手段方向來看,技術優化主要可以從復用優化,結果集合優化,高效實現優化,算法優化,計算優化,資源沖突優化和JVM優化等七個方面著手。
一般來說,技術優化基本都集中在計算機資源和存儲資源的規劃上,最直接的就是對于服務器和業務應用程序相關的資源做具體的分析,在照顧性能的前提下,同時也兼顧業務需求的要求,從而達到資源利用最優的狀態。一味地強調利用空間換時間的方式,只看計算速度,不考慮復雜性和空間的問題,確實有點不可取。特別是在云原生時代下和無服務時代,雖然模糊和減少了開發對這些問題的距離,但是我們更加需要了解和關注這些問題的實質。
特別指出的是,JVM優化。由于使用Java編寫的應用程序,本身Java是運行在JVM虛擬機上的,這就意味著它會受到JVM的制約。對于JVM虛擬機的優化。一定程度上會提升Java應用程序的性能。如果參數配置不當,導致內存溢出(OOM異常)等問題,甚至引發比這更嚴重的后果。
由此可見,正確認識和掌握JVM結構相關知識,對于我們何嘗不是一個進階的技術方向。當然,JVM虛擬機這一部分的內容,相對編寫Java程序來說,更加比較枯燥無味,概念比較多且抽象,需要我們要有更多的耐心和細心。我們都知道,一顆不浮躁的心,做任何事都會收獲不一樣的精彩。
更多關于“java培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。