如何對(duì)Java進(jìn)行性能優(yōu)化-創(chuàng)新互聯(lián)

如何對(duì)Java進(jìn)行性能優(yōu)化?其實(shí)要解決這個(gè)問(wèn)題也不難,為此小編總結(jié)了這篇文章,下面我們一起來(lái)看看Java進(jìn)行性能優(yōu)化的注意事項(xiàng)以及優(yōu)化方式。

創(chuàng)新互聯(lián)公司是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營(yíng)產(chǎn)品:成都響應(yīng)式網(wǎng)站建設(shè)公司、品牌網(wǎng)站設(shè)計(jì)營(yíng)銷型網(wǎng)站。我們專注企業(yè)品牌在網(wǎng)站中的整體樹(shù)立,網(wǎng)絡(luò)互動(dòng)的體驗(yàn),以及在手機(jī)等移動(dòng)端的優(yōu)質(zhì)呈現(xiàn)。網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、移動(dòng)互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營(yíng)、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價(jià)值服務(wù)。

如何對(duì)Java進(jìn)行性能優(yōu)化

Java性能調(diào)優(yōu)要注意什么?

1、調(diào)優(yōu)步驟:衡量系統(tǒng)現(xiàn)狀、設(shè)定調(diào)優(yōu)目標(biāo)、尋找性能瓶頸、性能調(diào)優(yōu)、衡量是否到達(dá)目標(biāo)(如果未到達(dá)目標(biāo),需重新尋找性能瓶頸)、性能調(diào)優(yōu)結(jié)束。
  

2、性能瓶頸的表象:資源消耗過(guò)多、外部處理系統(tǒng)的性能不足、資源消耗不多但程序的響應(yīng)速度卻仍達(dá)不到要求。

3、外部處理系統(tǒng)的性能不足:所調(diào)用的其他系統(tǒng)提供的功能或數(shù)據(jù)庫(kù)操作的響應(yīng)速度不夠。資源消耗不多但程序的響應(yīng)速度卻仍達(dá)不到要求:程序代碼運(yùn)行效率不夠高、未充分使用資源、程序結(jié)構(gòu)不合理。
  

4、CPU消耗分析:CPU主要用于中斷、內(nèi)核、用戶進(jìn)程的任務(wù)處理,優(yōu)先級(jí)為中斷>內(nèi)核>用戶進(jìn)程。
  

5、上下文切換:每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間、線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),將切換執(zhí)行的線程。在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程的狀態(tài)。對(duì)于Java應(yīng)用,典型的是在進(jìn)行文件IO操作、網(wǎng)絡(luò)IO操作、鎖等待、線程Sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過(guò)多會(huì)造成內(nèi)核占據(jù)較多的CPU的使用。
  

6、運(yùn)行隊(duì)列:每個(gè)CPU核都維護(hù)一個(gè)可運(yùn)行的線程隊(duì)列。系統(tǒng)的load主要由CPU的運(yùn)行隊(duì)列來(lái)決定。運(yùn)行隊(duì)列值越大,就意味著線程會(huì)要消耗越長(zhǎng)的時(shí)間才能執(zhí)行完成。
  

7、利用率:CPU在用戶進(jìn)程、內(nèi)核、中斷處理、IO等待、空閑,這五個(gè)部分使用百分比。
  

8、網(wǎng)絡(luò)IO消耗分析:對(duì)于分布式Java應(yīng)用,網(wǎng)卡中斷是不是均衡分配到各CPU(cat/proc/interrupts查看)。
  

9、文件IO消耗分析:Linux在操作文件時(shí),將數(shù)據(jù)放入文件緩存區(qū),直到內(nèi)存不夠或系統(tǒng)要釋放內(nèi)存給用戶進(jìn)程使用。所以通常情況下只有寫(xiě)文件和第一次讀取文件時(shí)會(huì)產(chǎn)生真正的文件IO。對(duì)于Java應(yīng)用,造成文件IO消耗高主要是多個(gè)線程需要進(jìn)行大量?jī)?nèi)容寫(xiě)入(例如頻繁的日志寫(xiě)入)的動(dòng)作、磁盤(pán)設(shè)備本身的處理速度慢、文件系統(tǒng)慢、操作的文件本身已經(jīng)很大。
  

10、JVM堆外的內(nèi)存:swap的消耗、物理內(nèi)存的消耗、JVM內(nèi)存的消耗。
  

11、文件IO消耗嚴(yán)重的解決方法:從程序的角度而言,造成文件IO消耗嚴(yán)重的原因主要是多個(gè)線程在寫(xiě)進(jìn)行大量的數(shù)據(jù)到同一文件,導(dǎo)致文件很快變得很大,從而寫(xiě)入速度越來(lái)越慢,并造成各線程激烈爭(zhēng)搶文件鎖。

Java性能調(diào)優(yōu)有哪些方式?

1、設(shè)計(jì)調(diào)優(yōu)
  

設(shè)計(jì)調(diào)優(yōu)處于Java性能調(diào)優(yōu)手段的上層,它往往須要在軟件開(kāi)發(fā)之前進(jìn)行。在軟件開(kāi)發(fā)之前,系統(tǒng)架構(gòu)師應(yīng)該就評(píng)估系統(tǒng)可能存在的各種潛在問(wèn)題和技術(shù)難點(diǎn),并給出合理的設(shè)計(jì)方案,因?yàn)檐浖O(shè)計(jì)和系統(tǒng)架構(gòu)對(duì)軟件總體設(shè)計(jì)質(zhì)量有決定性的影響。所以,設(shè)計(jì)調(diào)優(yōu)對(duì)系統(tǒng)的性能影響也是大的,如果代碼調(diào)優(yōu)、JVM調(diào)優(yōu)都是對(duì)系統(tǒng)微觀層次的量的優(yōu)化,那設(shè)計(jì)調(diào)優(yōu)就是對(duì)系統(tǒng)質(zhì)的優(yōu)化.
  

設(shè)計(jì)調(diào)優(yōu)的一大顯著特征是:它能夠規(guī)避某一個(gè)組件的性能問(wèn)題,而是改良組件的實(shí)現(xiàn);打個(gè)比方,組件A通過(guò)循環(huán)監(jiān)控不斷的檢測(cè)時(shí)間E是否發(fā)生,其檢測(cè)行為必定會(huì)占用部分系統(tǒng)資源。因此,開(kāi)發(fā)者必須檢測(cè)頻率和資源消耗上取得平衡。假設(shè)檢測(cè)頻率太低,盡管降低了資源消耗,可是系統(tǒng)實(shí)時(shí)反應(yīng)性就會(huì)降低;假設(shè)進(jìn)行代碼層的調(diào)優(yōu),就須要優(yōu)化檢測(cè)方法的實(shí)現(xiàn)及要求得一個(gè)最為恰當(dāng)?shù)臋z測(cè)頻率。對(duì)于這個(gè)問(wèn)題,我們就能夠用設(shè)計(jì)模式中的觀察者模式 ,當(dāng)事件E發(fā)生的時(shí)刻,由事件E通知組件A,從而觸發(fā)組件A的行為。這樣的設(shè)計(jì)從根本上攻克了存在性能隱患的循環(huán)監(jiān)控,從根本上攻克了這一問(wèn)題。進(jìn)行設(shè)計(jì)調(diào)優(yōu)時(shí),設(shè)計(jì)人員和必須熟悉經(jīng)常使用的設(shè)計(jì)方法,設(shè)計(jì)模式,以及主要的性能組件和經(jīng)常使用的優(yōu)化思想,并將其有機(jī)地集成在軟件系統(tǒng)中。


 2、代碼調(diào)優(yōu)

代碼調(diào)優(yōu)是在軟件開(kāi)發(fā)中,或者是軟件開(kāi)發(fā)完畢后,軟件維護(hù)過(guò)程中進(jìn)行的程序代碼的改進(jìn)和優(yōu)化。代碼優(yōu)化涉及諸多編碼技巧,須要開(kāi)發(fā)者熟悉相關(guān)的語(yǔ)言API ,并在適合的場(chǎng)景中正確的使用相關(guān)API或類庫(kù)。同一時(shí)候,對(duì)算法,數(shù)據(jù)結(jié)構(gòu)的靈活使用,也是代碼優(yōu)化的一個(gè)重要內(nèi)容。
  

盡管代碼優(yōu)化時(shí),從微觀上對(duì)性能進(jìn)行調(diào)整,可是一個(gè)好的實(shí)現(xiàn)和一個(gè)壞的實(shí)現(xiàn),對(duì)系統(tǒng)的影響也是非常大的。還是打個(gè)比方,相同作為L(zhǎng)ist的實(shí)現(xiàn),LinkedList和ArrayList在隨機(jī)訪問(wèn)上的性能卻差了好幾個(gè)量級(jí);比方相同是文件讀寫(xiě)的實(shí)現(xiàn),使用Stream方式和使用JAVA NIO的方式,其系能可能又會(huì)是還有一個(gè)數(shù)量級(jí)。因此,盡管與設(shè)計(jì)優(yōu)化相比,筆者將代碼優(yōu)化成為在微觀層面上的優(yōu)化,但它卻是對(duì)系統(tǒng)性能產(chǎn)生最直接影響的優(yōu)化方法。

3、JVM調(diào)優(yōu)
  

因?yàn)镴AVA軟件總是執(zhí)行在JVM虛擬機(jī)之上。對(duì)JVM虛擬機(jī)進(jìn)行優(yōu)化,也能一定程度上的提升JAVA程序的性能。JVM通常能夠在軟件開(kāi)發(fā)后期進(jìn)行,如在開(kāi)發(fā)完畢或者是軟件開(kāi)發(fā)的某一里程碑階段。作為JAVA軟件的執(zhí)行平臺(tái),JVM的各項(xiàng)參數(shù)將會(huì)直接影響JAVA程序的性能。舉個(gè)例子,JVM的堆大小,垃圾回收策略等等。要進(jìn)行JVM層面的調(diào)優(yōu)。須要開(kāi)發(fā)者對(duì)JVM的執(zhí)行原理和基本內(nèi)存結(jié)構(gòu)有一定的了解。如,堆內(nèi)存的結(jié)構(gòu),GC的種類等。然后,根據(jù)引用程序的特點(diǎn),設(shè)置合理的JVM啟動(dòng)參數(shù)。

4、數(shù)據(jù)庫(kù)調(diào)優(yōu)
  

對(duì)絕大部分應(yīng)用系統(tǒng)而言,數(shù)據(jù)庫(kù)是不可缺少的一部分,JAVA程序能夠使用JDBC的方式連接數(shù)據(jù)庫(kù)。對(duì)數(shù)據(jù)庫(kù)的調(diào)優(yōu)能夠分為三個(gè)部分:在應(yīng)用層對(duì)SQL語(yǔ)句進(jìn)行優(yōu)化;對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化。對(duì)數(shù)據(jù)庫(kù)軟件進(jìn)行優(yōu)化。在應(yīng)用層優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)。涉及大量的編程技巧。比方。當(dāng)使用JDBC進(jìn)行查詢的時(shí)候,對(duì)于大量擁有相同結(jié)構(gòu)的SQL查詢,能夠使用PerparedStatement取代Statement。以提高數(shù)據(jù)庫(kù)的查詢效率。在使用Select語(yǔ)句中,顯示指定要查詢的列名 ,避免使用*在對(duì)數(shù)據(jù)庫(kù)優(yōu)化時(shí),主要目的是建立一個(gè)具有良好表結(jié)構(gòu)的數(shù)據(jù)庫(kù)。在對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化時(shí)。主要目的是建立一個(gè)具有良好表結(jié)構(gòu)的數(shù)據(jù)庫(kù)。比如,為了提高多表級(jí)聯(lián)查詢效率,能夠合理地使用冗余字段。對(duì)于大表。能夠使用行數(shù)據(jù)來(lái)水平分割,為了提高數(shù)據(jù)庫(kù)的查詢效率,能夠建立有效且事宜的索引
  

5、操作系統(tǒng)調(diào)優(yōu)
  

操作系統(tǒng),調(diào)優(yōu)的手段和參數(shù)可能有所不同。比如,在主流Unix系統(tǒng)中,共享內(nèi)存段。信號(hào)量,共享內(nèi)存大值。共享內(nèi)存最小值等都是能夠進(jìn)行優(yōu)化的系統(tǒng)資源。此外,如大文件句柄數(shù),虛擬內(nèi)存大小,磁盤(pán)的塊大小等參數(shù)都可能對(duì)軟件的性能產(chǎn)生影響,配置虛擬內(nèi)存界面。

以上就是關(guān)于Java性能優(yōu)化的注意事項(xiàng)和解決方式,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:如何對(duì)Java進(jìn)行性能優(yōu)化-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://bm7419.com/article36/dpdppg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈網(wǎng)站排名、用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司