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