說(shuō)到代碼優(yōu)化,每個(gè)人或多或少都掌握一到兩種方法,但是這樣的方法對(duì)提升代碼運(yùn)行效率效果不大,最重要是對(duì)代碼的重視和了解,這樣才能提升代碼的運(yùn)行效率。在進(jìn)行代碼優(yōu)化的過(guò)程中,方法是非常重要的,多掌握幾種方法,根據(jù)代碼的不同情況選擇適合的方法進(jìn)行優(yōu)化。下面電腦培訓(xùn)為大家介紹Java代碼優(yōu)化的幾種方法。

專(zhuān)注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)吉木薩爾免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、使用指定類(lèi)、方法的final修飾符
具有final修飾符的類(lèi)不可派生。在Java核心API中,有許多最終應(yīng)用程序的例子,例如java.lang.String,整個(gè)類(lèi)都是final。為類(lèi)指定final修飾符允許繼承類(lèi),并且為方法指定final修飾符允許覆蓋該方法。如果將類(lèi)指定為final,IT培訓(xùn)認(rèn)為該類(lèi)的所有方法都是final。Java編譯器將尋找內(nèi)聯(lián)所有最終方法的機(jī)會(huì)。內(nèi)聯(lián)對(duì)于提高Java操作的效率非常重要。這可以將性能平均提高50%。
2、重用對(duì)象
String對(duì)象的使用是非常重要的,StringBuilder/StringBuffer并不是字符串連接。由于Java虛擬機(jī)需要時(shí)間來(lái)生成對(duì)象,所以將來(lái)垃圾收集和處理這些對(duì)象可能需要一些時(shí)間。因此,生成太多對(duì)象將對(duì)程序的性能產(chǎn)生很大影響。
3、使用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在堆棧中,速度更快。其他變量(如靜態(tài)變量和實(shí)例變量)在堆中創(chuàng)建并且速度較慢。此外,沙河北大青鳥(niǎo)發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,當(dāng)方法完成運(yùn)行時(shí),內(nèi)容消失,不需要進(jìn)行額外的垃圾收集。
4、及時(shí)關(guān)閉流
在Java編程過(guò)程中,在執(zhí)行數(shù)據(jù)庫(kù)連接和I/O流操作時(shí)要小心。使用后,北大青鳥(niǎo)沙河校區(qū)官網(wǎng)建議應(yīng)及時(shí)關(guān)閉以釋放資源。因?yàn)檫@些大型物體的操作會(huì)導(dǎo)致系統(tǒng)的大量開(kāi)銷(xiāo),稍微粗心會(huì)導(dǎo)致嚴(yán)重的后果。
每個(gè)人都說(shuō)代碼是程序員手中的一把雕刻刀,是對(duì)他們產(chǎn)品輪廓和細(xì)節(jié)的打磨。每個(gè)程序員在代碼優(yōu)化方面需要做的是,即使是每天處理代碼的程序員也有很多關(guān)于他們編寫(xiě)代碼的問(wèn)題,所以?xún)?yōu)化很重要。下面霍營(yíng)霍營(yíng)IT培訓(xùn)為大家介紹代碼優(yōu)化的方法。
1、盡量重用目標(biāo)
特別是,使用代表字符串收斂的String目標(biāo)應(yīng)該使用StringBuilder/StringBuffer。因?yàn)镴ava虛擬機(jī)不僅要花時(shí)間生成目標(biāo),而且可能還需要花時(shí)間檢索和刪除這些目標(biāo),所以霍營(yíng)計(jì)算機(jī)學(xué)院發(fā)現(xiàn)生成太多目標(biāo)會(huì)對(duì)程序的功能產(chǎn)生重大影響。
2、可以運(yùn)用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)和調(diào)用中創(chuàng)建的臨時(shí)變量保存在堆棧中的速度更快。其他變量,如靜態(tài)變量、實(shí)例變量等等,在堆中創(chuàng)建,速度較慢。此外,霍營(yíng)北大青鳥(niǎo)發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,方法的操作結(jié)束,當(dāng)這些內(nèi)容都消失了,就不需要額定廢物回收。
3、及時(shí)封閉流
Java的程序編寫(xiě)過(guò)程中,數(shù)據(jù)庫(kù)連接,I/O流操作必須謹(jǐn)慎,應(yīng)用結(jié)束后,應(yīng)該及時(shí)關(guān)閉發(fā)布資源。因?yàn)榛魻I(yíng)java培訓(xùn)發(fā)現(xiàn)這些大目標(biāo)的運(yùn)行會(huì)造成大系統(tǒng)支出,稍有不慎就會(huì)導(dǎo)致嚴(yán)重的結(jié)果。
性能優(yōu)化我覺(jué)得應(yīng)該分兩步走,第一步:尋找性能瓶頸,第二步:性能調(diào)優(yōu);
下面分別進(jìn)行分析:
第一步:尋找性能瓶頸
通常性能瓶頸的表象是資源消耗過(guò)多、外部處理系統(tǒng)的性能不足;或者資源消耗不多,但是程序效應(yīng)還是很慢;
資源主要消耗在cpu,文件io,網(wǎng)絡(luò)io以及內(nèi)存方面,當(dāng)某一資源消耗過(guò)多會(huì)造成系統(tǒng)響應(yīng)慢;
外部處理系統(tǒng)的性能不足主要是所調(diào)用其他系統(tǒng)提供的功能或數(shù)據(jù)庫(kù)的響應(yīng)速度不夠,外部系統(tǒng)慢可能也是資源消耗過(guò)多導(dǎo)致,數(shù)據(jù)庫(kù)響應(yīng)慢可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)優(yōu);
資源消耗不多但仍然慢主要原因是程序代碼運(yùn)行效率不高,未充分使用資源或程序結(jié)構(gòu)不合理;
1.1cpu消耗分析
可以通過(guò)相關(guān)命令比如top,pidstat,找出各個(gè)類(lèi)型消耗cpu的占比,最常見(jiàn)的就是us和sy類(lèi)型分別代表用戶(hù)進(jìn)程消耗和線程間切換消耗;如果us過(guò)高可以找到相關(guān)的線程ID然后分析代碼;如果sy過(guò)高是不是啟動(dòng)了過(guò)多的線程導(dǎo)致線程切換過(guò)多;
1.2文件io消耗
要跟蹤線程的文件IO消耗,可以通過(guò)pidstat來(lái)查找,可以查到每秒的讀寫(xiě)kb數(shù);找到讀寫(xiě)kb數(shù)多個(gè)線程,然后結(jié)合jstack找到相關(guān)的java代碼,然后分析;
1.3網(wǎng)絡(luò)io消耗
可以通過(guò)sar來(lái)分析網(wǎng)絡(luò)的消耗狀況,但是不能具體到每個(gè)線程所消耗的網(wǎng)絡(luò)IO,只能對(duì)線程dump,查找產(chǎn)生了大量網(wǎng)絡(luò)io的線程;
1.4內(nèi)存消耗
結(jié)合top或pidstat,以及jvm的內(nèi)存分析工具來(lái)分析內(nèi)存消耗;要區(qū)分是jvm外的物理內(nèi)存還是jvmheap區(qū)內(nèi)存;如果是jvm外的物理內(nèi)存要分析程序中DirectByteBuffer,如果是jvmheap可以通過(guò)jvisualvm來(lái)分析;
1.5資源消耗不多但仍然慢
主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源,數(shù)據(jù)量增長(zhǎng)
第二步:性能調(diào)優(yōu)
2.1jvm調(diào)優(yōu)
主要包括各個(gè)代的大小、GC策略等;代大小的設(shè)置:避免新生代大小設(shè)置過(guò)小,或者過(guò)大;避免Survivor區(qū)過(guò)小或過(guò)大;合理設(shè)置新生代存活周期;GC策略根據(jù)吞吐量?jī)?yōu)先還是延遲優(yōu)先進(jìn)行設(shè)置策略;
2.2程序調(diào)優(yōu)
1.CPU消耗嚴(yán)重解決
us過(guò)高主要是執(zhí)行線程無(wú)任何掛起動(dòng)作,可以進(jìn)行Thread.sleep操作;sy過(guò)高主要是因?yàn)閯?chuàng)建了過(guò)多的線程導(dǎo)致線程上下文切換;
2.文件IO消耗嚴(yán)重解決
造成文件IO消耗嚴(yán)重的原因主要是多個(gè)線程寫(xiě)大量的數(shù)據(jù)到同一個(gè)文件,導(dǎo)致文件很快變的很大,從而寫(xiě)入速度越來(lái)越慢,并造成各線程激烈競(jìng)爭(zhēng)爭(zhēng)搶文件鎖,常用的調(diào)優(yōu)方法:異步寫(xiě)文件,批量讀寫(xiě),限流,限制文件大小;
3.網(wǎng)絡(luò)IO消耗嚴(yán)重解決
主要原因是同時(shí)發(fā)送或者接受的包太多,解決辦法就是限流;
4.內(nèi)存消耗嚴(yán)重解決
解決:釋放不必要的引用,使用對(duì)象緩存池,采用合理的緩存失效策略,合理使用softReference和WeakReference;
2.3資源消耗不多但仍然慢
主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源
名稱(chēng)欄目:java代碼自動(dòng)優(yōu)化 java優(yōu)化代碼常見(jiàn)套路
URL地址:http://www.yijiale78.com/article40/ddjgcho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、做網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)
猜你還喜歡下面的內(nèi)容